動態規劃入門 洛谷P2409 Y的積木

2022-05-28 03:09:08 字數 1308 閱讀 7759

y是個大建築師,他總能用最簡單的積木拼出最有創意的造型。

y手上有n盒積木,每個積木有個重量。現在他想從每盒積木中拿一塊積木,放在一起,這一堆積木的重量為每塊積木的重量和。現在他想知道重量和最小的k種取法的重量分別是多少。(只要任意更換一塊積木,就視為一種不同的取法。如果多種取法重量總和一樣,我們需要輸出多次。)

輸入格式:

第一行輸入兩個整數,n,k,意義如題目所描述。

每組資料接下來的n行,第乙個整數為mi,表示第i盒積木的數量,在同一行有mi個整數,分別表示每個積木的重量。

輸出格式:

一行,重量最小的k種取法的重量,要求對於每個資料,從小到大輸出

輸入樣例#1:

3 10

4 1 3 4 5

3 1 7 9

4 1 2 3 5

輸出樣例#1:

3 4 5 5 6 6 7 7 7 7

對於30%的資料:2<=mi<=10,1<=n<=10

對於50%的資料:2<=mi<=50,1<=n<=50

對於100%的資料:2<=mi<=100,1<=n<=100,1<=k<=10000,每個積木的重量為不超過100的正整數,所有mi的積大於等於k。本題不卡常。

分組揹包

真水題......我真菜......

1 #include2 #include3 #include4 #include5

using

namespace

std;

6int

n,k,sum;

7int mi[110],in[110][110],f[110][10010];8

//f[i][j] 前i個盒子質量為j的方案數

9int

main()

18 sum+=maxx;19}

20 f[0][0]=1;21

for(int i=1;i<=n;i++)

22for(int j=1;j<=mi[i];j++)

23for(int p=sum;p>=in[i][j];p--)

24if(f[i-1][p-in[i][j]]) f[i][p]+=f[i-1][p-in

[i][j]];

25for(int i=1;i<=sum;i++)

26for(int j=1;j<=f[n][i];j++)

27if(k) printf("

%d ",i),k--;

28else

return0;

29return0;

30 }

洛谷 P2409 Y的積木

題目背景 y是個大建築師,他總能用最簡單的積木拼出最有創意的造型。題目描述 y手上有n盒積木,每個積木有個重量。現在他想從每盒積木中拿一塊積木,放在一起,這一堆積木的重量為每塊積木的重量和。現在他想知道重量和最小的k種取法的重量分別是多少。只要任意更換一塊積木,就視為一種不同的取法。如果多種取法重量...

洛谷 P2409 小Y的積木 (dp)

y是個大建築師,他總能用最簡單的積木拼出最有創意的造型。y手上有n盒積木,每個積木有個重量。現在他想從每盒積木中拿一塊積木,放在一起,這一堆積木的重量為每塊積木的重量和。現在他想知道重量和最小的k種取法的重量分別是多少。只要任意更換一塊積木,就視為一種不同的取法。如果多種取法重量總和一樣,我們需要輸...

洛谷P1028 數的計算 題解 動態規劃入門題

我們要求找出具有下列性質數的個數 包含輸入的自然數 n 先輸入乙個自然數 n n le 1000 然後對此自然數按照如下方法進行處理 不作任何處理 在它的左邊加上乙個自然數,但該自然數不能超過原數的一半 加上數後,繼續按此規則進行處理,直到不能再加自然數為止.1個自然數 n n le 1000 1個...