矩形嵌套
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
4
-
描述
- 有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[1100];
struct Rectangle
{
int l;
int r;
}r[1100];
bool cmp(Rectangle a,Rectangle b)
{
if(a.l == b.l )
return a.r < b.r ;
else
return a.l < b.l ;
}
int main()
{
int t,n,i,j;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
memset(r,0,sizeof(r));
for(i=0; i<n ;i++)
{
scanf("%d %d",&r[i].l ,&r[i].r );
int x=r[i].l;
int y=r[i].r;
if(x > y)
{
r[i].l = y;
r[i].r = x;
}
}
sort(r,r+n,cmp);
int ans=0;
for(i=0; i<n ;i++)
{
dp[i] = 1;
for(j=0; j<i ;j++)
{
if((r[i].l > r[j].r && r[i].r > r[j].l ) || (r[i].l > r[j].l && r[i].r >r[j].r) )
{
dp[i] = max(dp[i],dp[j]+1);
}
}
ans=max(dp[i],ans);
}
printf("%d\n",ans);
}
return 0;
}