bzoj 3359: [Usaco2004 Jan]矩形

来源:互联网 发布:百度新闻下載软件 编辑:程序博客网 时间:2024/04/28 20:09

→题目链接←


先令所有的矩形的x,y都是x<=y的

再以x为第一关键字,y为第二关键字,从小到大排序

然后就变成了找一个二维的最长上升子序列

n<=100所以n^2 dp就行

*注意两个矩形全等不算包含


代码:

#include<iostream>#include<cstdio>#include<queue>#include<algorithm>#include<vector>using namespace std;struct node{int x,y;friend bool operator < (node a,node b){if(a.x==b.x)return a.y<b.y;return a.x<b.x;}};int n;node a[110];int dp[110];int main(){scanf("%d",&n);for(int i=0; i<n; i++){scanf("%d%d",&a[i].x,&a[i].y);if(a[i].x>a[i].y)swap(a[i].x,a[i].y);}sort(a,a+n);for(int i=0; i<n; i++){dp[i]=1;for(int j=0; j<i; j++){if(a[j].x<=a[i].x && a[j].y<=a[i].y && !(a[j].x==a[i].x && a[j].y==a[i].y)){dp[i]=max(dp[i],dp[j]+1);}}}int ans=0;for(int i=0; i<n; i++)ans=max(ans,dp[i]);printf("%d\n",ans);return 0;}


原创粉丝点击