POJ 2241 The Tower of Babylon(动态规划)【DP--长方体类模板】

 

 【参考】http://http://blog.csdn.net/wangtaoking1/article/details/7308275


 【题解】 本来这个题我也是看了好久没思路,看了一下人家的博客,瞬间感觉高大上了好多,思路很巧,方法很妙,简单的来说就是,因为长方体有六个面,摆放方法不同,最后的高度也不一样,所以伟大的博主就把长方体6个面全都保存下来了,这样就相当于是遍历一个长方体的6种状态,每遍历一个长方体,更新它所能达到的最大高度。(其实就是求一个最长上升子序列,刚开始没看出来)。。

 【AC代码】

#include
#include
#include
#include
using namespace std;
struct node
{
    int x,y,z;
    void f(int a,int b,int c)
    {
        x=a; y=b; z=c;
    }
}nodee[200];

bool cmp(node a,node b)
{
    if(a.x*a.ynodee[j].x && nodee[i].y >nodee[j].y)
                    dp[i] = max(dp[i],dp[j]+nodee[i].z);
            }
            if(dp[i]>t)//更新最大高度
                t=dp[i];
        }
        printf("Case %d: maximum height = %d\n",cnt++,t);
    }
    return 0;
}


你可能感兴趣的:(ACM__区间DP,-----模板题型-----)