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);
}
}

浙公网安备 33010602011771号