HDU 1059 Dividing(多重揹包)

2021-07-04 00:12:01 字數 622 閱讀 4802

題意:

輸入6個數字,表示重量分別為1  2  3  4  5  6的大理石的數量

問能不能將這些大理石均分,不能把大理石弄破了

能的話就輸出 can be divided.

不能就輸出can't be divided.

解題思路:

邊輸入邊求和

如果和為0,就break

如果和為奇數,就輸出can't be divided.

和為偶數,多重揹包判斷

將每一塊大理石的重量的值當作花費的值,套一下模板就可以了

如果對多重揹包不是特別理解的,推薦看一下入門題http://

#include #include #include #include #include using namespace std;

int p[10],ans;

int dp[120005];

void completepack(int cost,int weight)

}void zeroonepack(int cost,int weight)

}void multiplepack(int cost,int weight,int number)

int k=1;

while(k

hdu1059 Dividing 多重揹包

題意 將價值分別為1,2,3,4,5,6的6種多個物品平均分兩坨 所有物品數量加起來不超過2w個 很容易想到dp的思路,dp i 表示是否存在使價值為i的選法,dp i dp i j j為物品的價值。然後對所有物品進行這種迴圈即可,但是會超時,這時候就需要將大量的相同物品二進位制分割,具體的原理需要...

HDU 1059 Dividing 多重揹包

題目就是要分彈珠,一人一半,多乙個少乙個都不行。六種彈珠,ni表示價值i的彈珠的數量,問能不能分。1.總價值為奇數當然不能分了。2.總價值為偶數,利用多重揹包求解,揹包容量為m 2,計算dp m 能否等於m,能就可以分。include includeint val 10 num 10 int dp ...

hdu 1059 Dividing 多重揹包

傳送門 分析 多重揹包按照二進位制拆分為01揹包 假設價值為w的物品有n個,則按照 1,2,4,8,1 log n 拆分 設sum 1,1 log n sum,設 ret n sum 則有在 0 sum 內的所有數p都可以用拆分數的和表示 二進位制表示 而 sum n 之間的數可用 p ret表示 ...