首页 > 代码库 > HDU 1051 Wooden Sticks
HDU 1051 Wooden Sticks
这题就是贪心算法,先对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; }
HDU 1051 Wooden Sticks
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。