多重揹包 poj 2392

2022-07-26 16:33:09 字數 873 閱讀 4908

**:

題目大意:有一頭奶牛要上太空,他有很多種石頭,每種石頭的高度是hi,但是不能放到ai之上的高度,並且這種石頭有ci個

將這些石頭疊加起來,問能夠達到的最高高度。

解題思路:首先對資料進行公升序排序,這樣才是乙個標準的多重揹包的問題

為什麼要排序?

因為只有這樣才能得到最優解,如果一開始就是高的在前面,那麼後面有低的卻不能選到,就直接選高的去了。這樣是不能達到最優解的

使f[i]的狀態標記,是否可以達到這個高度

這樣能夠達到取f[i]中i的最大值即可

#include #include 

#include

#include

using

namespace

std;

#define maxv 410

#define maxm 40010typedef

struct

blocks;

blocks v[maxv];

intcmp(blocks x,blocks y)

intf[maxm],user[maxm];

intmain()

sort(v+1,v+t+1

,cmp);

memset(f,

0,sizeof

(f));

f[0]=1

; max=0; //

賦值為0,不能為-1

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

}} printf(

"%d\n

",max); }

return0;

}

POJ 2392 多重揹包

題意 k個塊,給出每個塊的高度hi,數量ci,不能超過的高度 求這些塊可以組成的最大高度乙個。思路 大致可看這個題是乙個揹包,揹包的承重是高度。對於每個物品,有他的價值是高度,還有限定的數量,看到這裡就是乙個多重揹包,然後對於每個物品還有乙個限制是對於他的特定高度,這種怎麼處理其實很簡單吧。dp應該...

POJ 2392 多重揹包

題意 有k種塊,每種高度為hi,數量為ci,拿這k種塊去建塔,每種塊再塔中所處的高度不能超過ai,問塔最高能有多高 思路 首先因為每種塊所出的高度不能超過ai,那麼這個塔的最大高度不會超過max ai 以max ai 為陣列大小,為了保持結果能最優應保證ai小的在下層,所以應該以ai從小到大排序,之...

POJ 2392 多重揹包

送牛上太空的一道題 有k種型別的方塊,每行表示方塊高度,能堅持的極限高度,方塊個數 一維dp i 陣列表示高度i是否可行,初始為0 關鍵 為三層for迴圈,外層i看不同的方塊 方塊已經排過序 第二層j遍歷同一種方塊的個數,第三層k遍歷高度 從低高度到高高度正向做應該也行,但是寫起來比較複雜,反向去做...