dp之多重揹包poj2392

2022-04-28 15:03:11 字數 836 閱讀 2680

題意:有k種石頭,高為hi,在不超過ai的高度下,這種石頭可以放置,有ci種這個石頭,求這些石頭所能放置的最高高度.........

思路:以往的什麼硬幣種數,最大硬幣數之類的,他們的硬幣都已經是排好序了的,總是從小到大,但是這個題目不同,它有著最高高度的限制,那麼在思考的時候,要得到最優的,那麼首先就是要對ai排序......這是貪心,然後就是多重揹包了........

#include#include#include#includeusing namespace std;

struct node

s[500];

int dp[50000],num[41000];

int cmp(const node p,const node q)

s[500];

int dp[50000],c[5000][2];

int cmp(const node p,const node q)

c[cnt][0]=s[i].h*s[i].c;

c[cnt++][1]=s[i].a;

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

dp[0]=1;

for(int i=0;i=c[i][0];j--)

if(dp[j-c[i][0]]&&dp[j-c[i][0]]+c[i][0]-1<=c[i][1]&&dp[j-c[i][0]]+c[i][0]>dp[j])

}int maxn=0;

for(int i=0;i<=maxx;i++)

if(maxnmaxn=dp[i];

printf("%d\n",maxn-1);

}return 0;

}

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遍歷高度 從低高度到高高度正向做應該也行,但是寫起來比較複雜,反向去做...