最多能堆多高,要求上面的block要严格的小于下面block的底 即xj < xi
&& yj < yi
思路:动态规划 虽说每种block数量无限,但其实最多只能用三块。对全部的block 排序 x 降序 x相同 y 降序。
这样就能转换成最大非增递子序列。
//172K
0MS
#include <stdio.h>
#include <algorithm>
#define M 100
using namespace std;
struct data
{
x,y,h;
}node[M];
int num[3];
void
_sort()
//让num从大到小排
{
1;j < 3;j ++)
for (int i = 0;i < 3-j;i ++)
if (num[i] < num[i+1])
{
int tem = num[i];
num[i] = num[i+1];
num[i+1] = tem;
}
}
bool cmp (data a,data b)
{
> b.x)
return true;
b.x&&a.y >
b.y)
return true;
false;
}
int main ()
{
n,i,k,max,count = 0,tall[M];
("%d",&n)&&n)
k = 0;
for (i = 0;i < n;i ++)
{
scanf
("%d%d%d",&num[0],&num[1],&num[2]);
_sort ();
node[k].x = num[0],node[k].y = num[1],node[k++].h = num[2];
node[k].x = num[0],node[k].y = num[2],node[k++].h = num[1];
node[k].x = num[1],node[k].y = num[2],node[k++].h = num[0];
}
sort (node,node + k,cmp);
for (i = 0;i < k;i
++)
//dp求最大非递增子序列
{