hdu 1059 練習練習dp 多重揹包

2021-06-15 07:08:18 字數 637 閱讀 8452

經典的多重揹包問題,有若干個數,每個數可以取若干個,求問能不能取到總和的一半

直接把模板一敲就差不多了~

#include#include#include#includeusing namespace std;

const int size = 600000;

int sum;

int dp[size];

void zeroonepack(int cost,int weight)

void completepack(int cost,int weight)

void multipack(int cost,int weight,int count)

while(i>num[i];

sum+=num[i]*i;

} if(!sum)

break;

if(sum&1)

cout<<"collection #"<>=1;

for(i=0;i<=sum;i++)

dp[i] = 0;

for(i=1;i<7;i++)

if(num[i])

multipack(i,i,num[i]);

if(dp[sum]==sum)

cout<<"collection #"<

dp之多重揹包hdu1059

題意 價值為1,2,3,4,5,6.分別有n 1 n 2 n 3 n 4 n 5 n 6 個。求能否找到滿足價值剛好是所有的一半的方案。思路 簡單的多重揹包,我建議多重揹包都用二進位制拆分優化下.include include includeusing namespace std int dp 20...

HDU 1059 多重揹包

個人覺得,這個可以作為多重揹包的模板使用,其中包括了簡單的0 1揹包和完全揹包,分清楚它們三個的區別。include include define n 60005 define max a,b a b?a b int c n void complete int cost,int weight,int...

hdu 1059 多重揹包

題目的意思 有一堆大理石,按其大小分為1 6 種價值,兩個人想分得的價值相同的大理石,已知每種價值的大理石個數,問是否能讓兩個人分得價值相同的大理石?題目輸入 1 0 1 2 0 0 1 0 0 0 1 1 0 0 0 0 0 0 題目輸出 collection 1 can t be divided...