hdu1051贪心
新学到cmp还可以这样写,更简单
int cmp(wood a,wood b)
{
if(a.l!=b.l) return a.l<b.l;
return a.w<b.w;
}
表示先对l升序排列,如果相等,再对w升序排列
#include<stdio.h> #include<algorithm> #include<iostream> /*要写这两个才能用sort*/ using namespace std; /* */ struct wooden { int l,w; }wood[5009]; int cmp(wooden a,wooden b) { if(a.l<b.l) return 1; else if(a.l==b.l) { if(a.w<b.w) return 1; else return 0; } else return 0; } int main() { int t,i,n,g[5009],count,j,temp; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%d",&wood[i].l,&wood[i].w); g[i]=0; } sort(wood,wood+n,cmp); count=0; for(i=0;i<n;i++)//长度已经排好了 { if(g[i]==0) { temp=wood[i].w; for(j=i+1;j<n;j++) { if(g[j]==0)//比较没有选过的 { if(temp<=wood[j].w)//比较宽度 { g[j]=1;temp=wood[j].w;} //选了以后要标记并更新temp, //因为下一个要选的,要比之前选的wood的w都要大或相等 } } count++; } } printf("%d\n",count); } }