题意:
可以视为跟POJ1548相同,就是n个点(二维),要求分堆,每堆中点要求单调递增(A的x和y值都比B小则A<B),问最少分几堆。
题解:参见我的另一篇博客
然后贴代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 6000
#define inf 0x3f3f3f3f
using namespace std;
struct KSD
{
int x,y;
bool operator < (const KSD &a)const
{if(x==a.x)return y<a.y;return x<a.x;}
}s[N];
int n,f[N];
int main()
{
// freopen("test.in","r",stdin);
int i,j,g;
s[0].y=inf;
scanf("%d",&g);
while(g--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d%d",&s[i].x,&s[i].y);
sort(s+1,s+n+1);
for(i=1;i<=n;i++)
{
f[i]=0;
for(j=i-1;j>=0;j--)
{
if(s[j].y>s[i].y)f[i]=max(f[i],f[j]+1);
}
}
int ans=0;
for(i=1;i<=n;i++)ans=max(ans,f[i]);
printf("%d\n",ans);
}
return 0;
}