poj 2241 簡單dp(最高巴比倫塔)

2021-06-26 19:45:52 字數 662 閱讀 9532

題意:現有不超過三十個的立方體。給定其邊長:a*b*c。已知每種立方體的個數不限。現在欲堆放立方體,兩個立方體能夠堆疊的條件是上面的立方體的底面長和寬嚴格小於放在其下面的立方體。問由這些立方體最高能夠堆疊多高。

思路:將每個立方體按照abc的排列看成6個立方體,ab看成底面的長和寬,c看成高。對a排序。此後dp[i]表示以第i個立方體作為底能堆疊的最高高度。

#include #include #include #define max(a,b) ((a)>(b)?(a):(b))

#define n 185

struct nodep[n];

int dp[n],n,c=1;

int cmp(const struct node *a,const struct node *b)

int main(){

freopen("a.txt","r",stdin);

while(scanf("%d",&n) && n){

int i,j,a,b,c,top,res;

top = res = 0;

for(i = 0;i=0;j--)

if(p[i].a > p[j].a && p[i].b > p[j].b)

dp[i] = max(dp[i],dp[j]+p[i].h);

for(i = 0;i

POJ 1837 簡單 DP 二逼 DP

這個題,讓我看到就想到最長上公升子串行,1000的大小,n 2 就可以 但是注意到,最高的兩個士兵可以是相同身高的,所以,再求出左右兩個最長上公升子串行之後,最後得出結果的時候要注意這一點。這個地方 wa 了好多次,這個題目的通過率這麼低 應該就是這個點。include include includ...

POJ 3280 簡單區間 DP

就是想的時候不要想漏了轉移方式。對於乙個回文串 去掉最左和最右兩個後依然是回文串,好了。dp 轉移有三種,一種是從 dp i 1 j 轉移過來,一種是從 dp i j 1 轉移過來,一種是從 dp i 1 j 1 轉移過來 include include include include includ...

POJ2342 簡單樹形dp

因為在做hdu4126的時候需要使用樹形dp,然而我對樹形dp一點也不了解,所以做一下樹形dp的題來加深其了解,題目不說了 dp方程是 dp i 0 max dp j 0 dp j 1 i是j的父親 dp i 1 dp j 0 其中dp i 0 表示該人沒來 dp i 1 表示該人來了 貼 incl...