题意:
可以视为跟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;
}

本文介绍了一个关于二维平面上的点分堆问题,旨在将这些点按单调递增顺序划分成最少数量的堆。文章提供了详细的解题思路,并附带完整的C++代码实现,采用动态规划的方法求解问题。
&spm=1001.2101.3001.5002&articleId=40818831&d=1&t=3&u=3cb9944f969d426caa0b81edca6fab19)
200

被折叠的 条评论
为什么被折叠?



