标签:
这题就是贪心算法,先对length升序排列,如果length相等,再按weight升序排列;反之亦可。然后根据题目要求进行选择即可。
不过我在写排序函数的时候出了一点问题,害得我还一度以为我的贪心策略是错的。
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<stack> #include<queue> using namespace std; const int N=5005; bool used[N]; struct point { int x,y; }stick[N]; bool cmp(point a,point b) { if(a.x<b.x) return true; if(a.x==b.x) return a.y<b.y; return false; } int main() { int n,t; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d%d",&stick[i].x,&stick[i].y); sort(stick,stick+n,cmp); //for(int i=0;i<n;i++) //printf("x=%d,y=%d\n",stick[i].x,stick[i].y); memset(used,false,sizeof(used)); int ans=0; for(int i=0;i<n;i++) { if(used[i]) continue; int x=stick[i].x,y=stick[i].y; used[i]=true,ans++; for(int j=i+1;j<n;j++) { if(!used[j]&&(stick[j].x>=x&&stick[j].y>=y)) { x=stick[j].x,y=stick[j].y; used[j]=true; } } } printf("%d\n",ans); } return 0; }
标签:
原文地址:http://blog.csdn.net/u013621213/article/details/43415843