hdu 1059 多重揹包

2022-06-03 14:48:10 字數 1130 閱讀 5774

題意:價值分別為1,2,3,4,5,6的物品個數分別為a[1],a[2],a[3],a[4],a[5],a[6],問能不能分成兩堆價值相等的。

解法:轉化成多重揹包

1 #include2 #include

3 #include4 #include5

using

namespace

std;67

int dp[120010];8

int a[10];9

10int

nvalue;

1112

//0-1揹包,代價為cost,獲得的價值為weight

13void zeroonepack(int cost,int

weight)

1418

19//

完全揹包,代價為cost,獲得的價值為weight

20void completepack(int cost,int

weight)

2125

26//

多重揹包

27void multiplepack(int cost,int weight,int

amount)

2839 zeroonepack(amount*cost,amount*weight);//

這個不要忘記了,經常掉了40}

41}4243

intmain()

4455

if(tol==0)break

;56 printf("

collection #%d:\n

",icase);

57if(tol%2!=0)58

62else

6367 memset(dp,0,sizeof

(dp));

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

69multiplepack(i,i,a[i]);

70if(dp[nvalue]==nvalue)printf("

can be divided.\n\n");

71else printf("

can't be divided.\n\n");

72}73return0;

74 }

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,它的體積也是...