經典的多重揹包問題,有若干個數,每個數可以取若干個,求問能不能取到總和的一半
直接把模板一敲就差不多了~
#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...