UVALive - 3266 Tian Ji -- The Horse Racing 贪心

题目大意:田忌赛马,具体的内容就不多说了,田忌赢一场得200,输一场扣200,平局不得分,求最大能赢多少

解题思路:田忌赛马的话,先按马的能力进行排序,然后尽心贪心计算,具体贪心如下:

1.如果田忌的最好的马 > king的最好的马,就进行比赛,得200分

2.如果田忌的最好的马 == king的最好的马,就比较一下田忌最差的马和king最差的马

            a.如果田忌最差的马 > king最差的马,就让两匹最差的马进行比赛(要找到小于king的马,然后让这匹差马和king的好马比才能达到最优),田忌得200

            b.如果田忌最差的马 < king最差的马,让田忌最差的马和king的好马进行比赛,田忌-200

             c.如果田忌最差的马 == king最差的马,让田忌最差的马和king的好马进行比赛,田忌得0

3.如果田忌的最好的马 < king的最好的马,用田忌最差的马和king的好马比,田忌-200

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 1010
int	ji[maxn], king[maxn] , n;

int cmp(const int a, const int b) {
	return a > b;
}

int main() {
	while(scanf("%d", &n) == 1 && n) {
		for(int i = 0; i < n; i++)
			scanf("%d",&ji[i]);
		for(int i = 0; i < n; i++)
			scanf("%d",&king[i]);
		sort(ji,ji+n,cmp);
		sort(king,king+n,cmp);
		int max_ji = 0, max_king = 0;
		int min_ji = n - 1, min_king = n - 1;
		int ans = 0;
		while(n--) {
			if(ji[max_ji] > king[max_king])	{
				ans++;
				max_ji++;
				max_king++;
			}
			else if(ji[max_ji] < king[max_king]) {
				ans--;
				min_ji--;
				max_king++;	
			}
			else {
				if(ji[min_ji] > king[min_king]) {
					ans++;
					min_ji--;
					min_king--;	
				}
				else {
					if(ji[min_ji] < king[max_king])
						ans--;
					min_ji--;
					max_king++;
				}
			}
		}
		printf("%d\n",ans*200);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值