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

 

posted @ 2013-04-15 12:49  宛如  阅读(192)  评论(0编辑  收藏  举报