題目鏈結題目意思
現在有很多的彈珠,每個彈珠都有乙個1~6的價值,現在要將這些彈珠分成價值相同的兩部分,問你能不能分開。
解題思路
這就是乙個典型的多重揹包題,給你了彈珠的價值和重量,就問你能不能分成價值相同的兩部分。為了防止超時,我們要進行二進位制優化。
**部分
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn=100100;
int a[10];
int dp[maxn];
int val[maxn],weight[maxn],num[maxn];
int temp,k;
void zeroonepack(int nweight,int nvalue)
}void completepack(int nweight,int nvalue)
}void multiplepack()
else
zeroonepack(ncount*i,ncount*i);}}
}int main()
if(sum==0)
break;
if(sum%2==1)
else
else}}
return
0;}
hdu1059 Dividing 多重揹包
題意 將價值分別為1,2,3,4,5,6的6種多個物品平均分兩坨 所有物品數量加起來不超過2w個 很容易想到dp的思路,dp i 表示是否存在使價值為i的選法,dp i dp i j j為物品的價值。然後對所有物品進行這種迴圈即可,但是會超時,這時候就需要將大量的相同物品二進位制分割,具體的原理需要...
HDU 1059 Dividing(多重揹包)
題意 輸入6個數字,表示重量分別為1 2 3 4 5 6的大理石的數量 問能不能將這些大理石均分,不能把大理石弄破了 能的話就輸出 can be divided.不能就輸出can t be divided.解題思路 邊輸入邊求和 如果和為0,就break 如果和為奇數,就輸出can t be div...
HDU 1059 Dividing 多重揹包
題目就是要分彈珠,一人一半,多乙個少乙個都不行。六種彈珠,ni表示價值i的彈珠的數量,問能不能分。1.總價值為奇數當然不能分了。2.總價值為偶數,利用多重揹包求解,揹包容量為m 2,計算dp m 能否等於m,能就可以分。include includeint val 10 num 10 int dp ...