**:
題目大意:有一頭奶牛要上太空,他有很多種石頭,每種石頭的高度是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遍歷高度 從低高度到高高度正向做應該也行,但是寫起來比較複雜,反向去做...