LC 數學 湊數

2021-10-22 18:39:12 字數 1534 閱讀 2527

link

給定長為n

(1e5

)的陣列a([

1,1e9]

)湊數: 從中選擇任意多個元素的和

比如:a =[1

,2,5

] 他可以湊成:b =

問,b陣列中 形如[1,

2,3,

..., k]的連續遞增陣列的長度 最大值。

如圖中的答案為: 3 即[1,

2,3]

1, 首先會想到的乙個演算法,自然是揹包dp

即n件物品,每個物品選與不選。 得到陣列b。 最終,再從1開始遞增

這肯定是超時的。

2, 很重要的一點,所有元素均》=

1, 我們從小到大把元素存入map裡 [1

,3][

5,2]

....

1有3個,他可以組成[0,

1,2,

3]。 而下乙個元素是5,就說明: 4一定是無法湊出的!!

核心是,我們要得到這個[0,

1,2,

3]: 即當前可以湊成的,從0開始連續的序列

我們暫且用add來表示,[0,

1,2,

..., add] 為當前已經可以湊成的。2,

2]第一步:先放1個2, 即在[0,

1,2..

.add]的基礎上,再統一 +=2

變為: [0,

1,..

., add+2]

第二步:再放1個2,即在[0,

1,2,

...,add+

2]的基礎上,再統一 +=2

變為: [0,

1,..

., add+4]

4,2]

第一步:先放1個4, 即在[0,

1,2..

.add]的基礎上,再統一 +=4

變為: [0,

1,..

., add+4]

第二步:再放1個2,即在[0,

1,2,

...,add+

4]的基礎上,再統一 +=4

變為: [0,

1,..

., add+4]

綜上: 我們記錄乙個add, 表示當前已經可以湊成[0,

1,..

., add]

當遍歷到[a, b]元素時:

1,如果a >

(add +

1),說明 (add +

1)這個元素,一定湊不出!!!

2,否則, 執行: add +

=(a * b)

for(

auto i : a)

if(cont[1]

==0)return0;

int add =0;

// [0, 1, 2, ..., add]

for(

auto

&[a, b]

: cont)

add +

=(a * b);}

return add +

1;

歷屆試題 包子湊數 真 湊數)

問題描述 小明幾乎每天早晨都會在一家包子鋪吃早餐。他發現這家包子鋪有n種蒸籠,其中第i種蒸籠恰好能放ai個包子。每種蒸籠都有非常多籠,可以認為是無限籠。每當有顧客想買x個包子,賣包子的大叔就會迅速選出若干籠包子來,使得這若干籠中恰好一共有x個包子。比如一共有3種蒸籠,分別能放3 4和5個包子。當顧客...

湊數字遊戲

problem description 金牌大圖神的演算法能力最近又有不少提高 為了杭電acm集訓隊的可持續性發展,現在他幫忙出了一道題目來訓練新隊員 給出4種數字583,1643,3233,5989,依次分別有n,m,k,g個,請找出用這些數字能湊成的和最接近l的數,如果有2個同樣接近的,請輸出較...

牛牛湊數字

題目 牛牛今天家裡要來客人,所以牛牛今天特意做了他最拿手的兩種蛋糕,但是他是乙個有潔癖的人,所以他在分蛋糕時,有如下幾個原則 1.他不希望乙個盤子裡出現兩種蛋糕 2.他希望每個盤子中都有蛋糕 3.他想讓裝有最少蛋糕數量的盤子中裝有的蛋糕數量盡可能多 示例1複製 5,2,3複製 1只有一種方法把蛋糕分...