題意:n件物品,揹包大小為c,每件物品有一定的價值和體積,求揹包能裝的最大價值。
思路:如果用01揹包做肯定超時,因為資料給得太大了,我們可以根據價值和體積來區分物品,相當於揹包空間和含有的價值 有多個,多重揹包,然後用二進位制優化,再用01揹包來做;
**:
#include
#include
#include
#define max(x,y) (x>y?x:y)
int dp[10005];
int main()
for(i=1;i<=10;i++)
for(k=s;k>=zz*j;k--)
dp[k]=max(dp[k],dp[k-zz*j]+zz*i);}}
printf("%d\n",dp[s]);
}}
HDU 3732 多重揹包
這道題目意思很簡單就是 輸入 n 和 c n是代表n行,而c是複雜性,輸入一些單詞,然後告訴這些單詞的價值,還有這些單詞的複雜性!一開始我一看這個題目就以為是01揹包,然後就馬上寫完,第一組測試資料過了,但是卻wa!後來看別人的部落格,發現用多重揹包,就想想,後來想通了,首先用01揹包做第一組資料之...
多重揹包二進位制優化
多重揹包二進位制優化 將價值數量相同的物品分成1,2,4,8.因為100以內任何數都可以由幾個2的n次方數組成。所以,有遍歷沒乙個數變為遍歷每乙個2的n次方數。例題 有n種物品,每種物品的數量為c1,c2.cn。從中任選若干件放在容量為w的揹包裡,每種物品的體積為w1,w2.wn wi為整數 與之相...
多重揹包(二進位制優化)
馬上就要輕院校賽了,沒時間了,下面是網上找的多重揹包,感覺很好 void zeroonepack int cost,int weight,int n void completepack int cost,int weight,int n void multipack int c,int w,int ...