hdu1085 多重部分和問題

2022-03-21 02:57:19 字數 538 閱讀 2531

題目大意是給定1 2 5的數量 a, b, c, 問1 2 5不能組成的最小的數是多少?可以使用dp來解決, 定義dp[i][j]為前i種組成j的時候第i中數剩餘多少, 那麼

dp[i][j] = mi (dp[i-1][j]>=0)   -1 (a[i]>j || dp[i][j-a[i]]<=0)   dp[i][j-a[i]]-1 (其他), **如下:

#include #include 

#include

using

namespace

std;

int a[5] = ;

int m[5

];int dp[5][15000+10]; //

前i中組成j的時候 第i種剩餘多少

intmain()

intres;

for(int j=0; j<=15000; j++)

if(dp[3][j] == -1

)

cout

}return0;

}

多重部分和問題

有 n 種物品,第i種物品的每個物品的價值是 ai 數目是 mi 判斷是否可以選擇若干數字使得價值和是k。1 n 100 1 ai,m i,10 5 1 k 105 看作揹包大小是k,物品的價值和體積都是ai 物品數目是 mi 的多重揹包。如果最大價值是 k 的話就是可以選出,否則便是不能選出。利用...

多重部分和問題

有n種不同大小的數字a i 每種各m i 個。判斷是否可以從這些數字之中選出若干使它們的和恰好為k。dp i 表示以a i 為末尾的最長上公升子串行的長度。include include include includeusing namespace std define maxn 10010 int...

多重部分和問題

有n種不同大小的數字a i 每種各m i 個。判斷是否可以從這些數字中選出若干使它們的和恰好為k。限制條件 1 n 100,1 a i m i 100000,1 k 100000 這個問題可以用dp求解,如何定義遞推式影響最後的時間複雜度。定義dp i 1 j 用前i 1種數字 數字的編號是從0到i...