POJ 2392 多重揹包

2021-08-05 22:41:39 字數 978 閱讀 6327

題意:有k種塊,每種高度為hi,數量為ci,拿這k種塊去建塔,每種塊再塔中所處的高度不能超過ai,問塔最高能有多高;

思路:首先因為每種塊所出的高度不能超過ai,那麼這個塔的最大高度不會超過max(ai),以max(ai)為陣列大小,為了保持結果能最優應保證ai小的在下層,所以應該以ai從小到大排序,之後每次以ai為揹包容量去求解;

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define maxn 33000

#define inf 0x3f3f3f3f

#define lmid l,m,rt<<1

#define rmid m+1,r,rt<<1|1

#define ls rt<<1

#define rs rt<<1|1

#define mod 1000000007

#define i64 __int64

#define limit_ull 100000000000000000

using

namespace

std;

int dp[40005];

struct node

}else

v-=k;

k*=2;

}for(int i=sum;i>=v*w;i--)

}}int main()

sort(s,s+n);

memset(dp,0,sizeof(dp));

for(int i=0;iint j=0;

for(int i=0;i<=sum;i++)//顯而易見dp[sum]不一定為最優解,所以要列舉出最大值

cout

0;}

POJ 2392 多重揹包

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

POJ 2392 多重揹包

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

POJ 2392 多重揹包

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