poj1014多重揹包

2021-07-23 01:38:41 字數 994 閱讀 5533

做這個題目的時候受到dp時取min還是max的影響,不知道最後該怎麼做,看了大神的blog有了思路,直接貼上**了。

出處:

you的部落格

//memory time 

//656k 16ms

/*多重揹包+二進位制優化*/

#include

#includeusing namespace std;

int n[7]; //價值為i的物品的個數

int v; //揹包容量

int sumvalue; //物品總價值

bool flag; //標記是否能平分sumvalue

int dp[100000]; //狀態陣列

int max(int a,int b)

/*完全揹包*/

void completepack(int cost,int weight)

}return;

}/*01揹包*/

void zeroonepack(int cost,int weight)

}return;

}/*多重揹包*/

void multiplepack(int cost,int weight,int amount)

if(flag) //剪枝

return;

/*二進位制優化*/

int k=1;

while(k>n[1]>>n[2]>>n[3]>>n[4]>>n[5]>>n[6])

{sumvalue=0; //物品總價值

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

sumvalue+=i*n[i];

if(sumvalue==0)

break;

if(sumvalue%2) //sum為奇數,無法平分

{cout<<"collection #"<

POJ1014 多重揹包

今天開始dp了,第一道多重揹包,模板題,還是想了很久,太弱了 題意 一行給出6個數,表示從1到6,6個不同權值的個數.求能否將所有權值不分割的分成權值相等的兩份.首先總權值為奇數的肯定不符合要求,接下來就是乙個多重揹包了.多重揹包的二進位制拆分我的理解大概是 首先將乙個數按二進位制拆分之後可以用拆分...

poj 1014多重揹包

題意 給出價值為1,2,3,4,5,6的6種物品數量,問是否能將物品分成兩份,使兩份的總價值相等。思路 求出總價值除二,做多重揹包,需要二進位制優化。include include includeusing namespace std int n 7 int v,sum bool flag int ...

poj 1014 多重揹包問題

dividing 題意 有一堆大理石,每個石頭的價值在1 6之間,每種 的石頭有多個。現在要求將這堆石頭分成兩份,使得兩份的總價值相同,回答是否存在一種方法將可以實現劃分。這是一道多重揹包問題,多重揹包問題的做法可以是先將它轉化為01揹包,再用01揹包問題的方法繼續求解。轉化的思路是,將乙個 下的幾...