题目:http://acm.hdu.edu.cn/showproblem.php?pid=1677
类似于求最长下降子序列的个数,此题可以用动态规划来解,不过我用简单的搜素来做,可惜超时,先上代码再优化。
#include <iostream> #include <cmath> #include <string> #include <algorithm> #include <vector> using namespace std; struct node{ int w,h; }; node a[20001]; bool cmp(node a,node b){ if(a.w!=b.w)return a.w<b.w; return a.h<b.h; } bool visit[20001]; int main() { int t; scanf("%d",&t); //cin>>t; while(t--) { int m; scanf("%d",&m); //cin>>m; for(int i=0;i<m;i++) { scanf("%d %d",&a[i].w,&a[i].h); //cin>>a[i].w>>a[i].h; } sort(a,a+m,cmp); for(int i=0;i<m;i++)cout<<a[i].w<<" "<<a[i].h<<endl; memset(visit,0,sizeof(visit)); int cnt=0; for(int i=0;i<m;i++) { if(visit[i])continue; int k=i; for(int j=0;j<m;j++) { if(visit[j])continue; if(a[k].w<a[j].w&&a[k].h<a[j].h){ visit[j]=1; k=j; } } cnt++; visit[i]=1; } cout<<cnt<<endl; } return 0; }
作者:xiaozhuaixifu 发表于2013-6-6 0:19:37 原文链接
阅读:84 评论:0 查看评论