>= l'并且m >=
m'时,木块'可安装于另一个上面。问最高能叠几层积木。
思路:这个问题可以转化求最长非递增子序列
//228K
47MS
#include <stdio.h>
#include <algorithm>
#include <string.h>
#define M 10010
using namespace std;
struct data
{
l,m;
}node[M];
bool cmp (data a,data b)
{
> b.l)
return true;
b.l&& a.m >
b.m)
return true;
false;
}
int main ()
{
max,n,i,j;
dep[M];
//dep[i]表示第i块木能堆多高
("%d",&n)&&n)
memset (dep,0,sizeof(dep));
for (i = 0;i < n;i ++)
scanf
("%d%d",&node[i].l,&node[i].m);
sort (node,node + n,cmp);
dep[0] = 1;
for (i = 0;i < n;i
++)
//求最长非递增子序列
{
max = 0;
for (j = 0;j < i;j ++)
if (node[j].l >=
node[i].l&&node[j].m
>= node[i].m&&dep[j]
>= max)
max = dep[j];
dep[i] = max + 1;
}
max = dep[0];
for (i = 1;i < n;i
++)
//取最大的就是ans
max = max > dep[i] ? max : dep[i];
printf ("%d\n",max);
("*\n");
0;
}