HDU 3732 多重揹包

2021-06-18 08:30:15 字數 684 閱讀 7650

這道題目意思很簡單就是:輸入 n 和 c ,n是代表n行,而c是複雜性,輸入一些單詞,然後告訴這些單詞的價值,還有這些單詞的複雜性!

一開始我一看這個題目就以為是01揹包,然後就馬上寫完,第一組測試資料過了,但是卻wa!後來看別人的部落格,發現用多重揹包,就想想,

後來想通了,首先用01揹包做第一組資料之所以能過,是因為第一組資料沒有給出重複的單詞,如果給出重複的單詞就會出現數目的問題,就不

能用01揹包,而且數量還是有限的,所以就用多重揹包!!1這題純粹就是乙個假的01揹包!!!我感覺這道題目蠻好的!!!

**如下:

#include #include #include #include using namespace std;

const int maxn=100005;

int value[maxn],cost[maxn],num[12][12];

int f[maxn];

char s[15];

int n,c;

void zeropack(int value1, int cost1)

}void completpack(int value1,int cost1)

}void multiplepack(int value1,int cost1,int num1)

else

{int k=1;

while(k

hdu3732 多重揹包 二進位制優化

題意 n件物品,揹包大小為c,每件物品有一定的價值和體積,求揹包能裝的最大價值。思路 如果用01揹包做肯定超時,因為資料給得太大了,我們可以根據價值和體積來區分物品,相當於揹包空間和含有的價值 有多個,多重揹包,然後用二進位制優化,再用01揹包來做 include include include d...

HDU 3732(01揹包轉多重揹包)

這道題很有意思,n,c的資料量達到10000,如果用普通的01揹包來做絕對會超時,注意到v和c只有0 10的範圍,這說明有大量的v,c是重複的,相同的v,c的單詞是等價的,這樣就可以轉化為多重揹包來做。不過普通的多重揹包又可能會超時,於是我們採取二進位制優化的方式來優化成01揹包問題。從01揹包到多...

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...