hdu1052 Tian Ji -- The Horse Racing

田忌赛马,经典的贪心,不过很难想到呀,每次都用最快跟最快的,最慢的跟最慢的进行比较、判断

1)若田最快的比王最快的慢,则用最慢的跟王最快的比,输掉一局;反之,则赢了当然是最划算的选择了

2)若田最慢的比王最慢的还慢,则用最慢的跟王最快的比,输掉一局;反之,同上。

这俩步是贪心所在;

还有就是注意想等到情况……

看代码吧

#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
	return *(int*)a-*(int*)b;
}
int main()
{
	int s[1001],t[1001],n;
	while(scanf("%d",&n)==1&n!=0)
	{
		for(int i=0;i<n;i++)
			scanf("%d",&s[i]);
		for(int i=0;i<n;i++)
			scanf("%d",&t[i]);
		qsort(s,n,sizeof(s[0]),cmp);//排序,速度慢的在前面
		qsort(t,n,sizeof(t[0]),cmp);
		int s1=0,s2=0,e1=n-1,e2=n-1;
		int sum1=0,sum2=0;
		while(s1<=e1&&s2<=e2)
		{
			if(s[s1]>t[s2])//最慢的马进行比较,
			{
				sum1++;s1++;s2++;
			}
			else if(s[s1]<t[s2])//若最慢的比王的还慢,则用来跟王的最快比
			{
				sum2++;s1++;e2--;
			}
			else {
				if(s[e1]>t[e2])//最快的马进行比较
				{
					sum1++;e1--;e2--;
				}
				else if(s[e1]<t[e2])//若最快的比王的最快的还慢,则用最慢的更王的最快的比
				{
					sum2++;s1++;e2--;
				}
				else {
					if(s[s1]==t[e2])//剩下的马均相等的情况
						break;
					else {
						sum2++;s1++;e2--;
					}
				}
			}
		
	   }
	printf("%d\n",(sum1-sum2)*200);
}
return 0;
}
posted @ 2011-07-27 22:14  枕边梦  阅读(200)  评论(0编辑  收藏  举报