hdu1069 dp最长单调序列

有n中不同的长方体,每种个数不限,叠加在一起,叠加的条件是,上面一个长方体的长和宽都比下面长方体的长


和宽短;求这些长方体能叠加的最高的高度,每种长方体都可以翻转,xyz可以翻转成xzy,yxz,yzx,zxy,zyx


思路和最长子序列差不多,求最大能得出的最大高度了。

#include 
#include 
#include 
using namespace std;

const int maxn=30*6+5;

struct node
{
    int x,y,z;
    bool operator < (const node &n) const{
        if(xblocks[j].x&&blocks[i].y>blocks[j].y)tmp=max(tmp,dp[j]);//哪一摞的高度最大
            }
            dp[i]=blocks[i].z+tmp;//把j放到能放的最大那一摞上面
        }
        int res=0;
        for(int i=0;i


你可能感兴趣的:(DP)