題意:價值為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[200000],w[200000];
int main()
if(sum==0)
break;
printf("collection #%d:\n",++text);
if(sum%2==1)
sum/=2;
int cnt=0;
for(int i=1;i<=6;i++)
w[cnt++]=t[i]*i;
}memset(dp,0,sizeof(dp));
for(int i=0;i=w[i];j--)
if(dp[j]dp[j]=dp[j-w[i]]+w[i];
}if(dp[sum]==sum)
printf("can be divided.\n");
else
printf("can't be divided.\n");
printf("\n");
}return 0;
}
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...
hdu1059 多重揹包
這道剛開始都沒想出來。後來發現我以前做了一道和這個完全一樣的題,就是計蒜客的平分娃娃,好菜呀 t t 說的可能有些繁瑣。大佬可以忽略,直接看 一道經典的多重揹包問題,但是會卡時間,用二進位制優化一下就解決了。這裡重點講思路,題目問的如何將一堆彈珠均等對半分,可以先這樣想,乙個彈珠價值6,它的體積也是...