poj 2287 Tian Ji -- The Horse Racing (贪心)

# include <stdio.h>
# include <algorithm>
# include <string.h>
using namespace std;
int main()
{
	int n,i,j,k,count;
	int flag1[1010],flag2[1010],a[1010],b[1010];
	while(~scanf("%d",&n),n)
	{
		for(i=0;i<n;i++)
		   scanf("%d",&a[i]);
		for(i=0;i<n;i++)
			scanf("%d",&b[i]);
		memset(flag1,0,sizeof(flag1));
		memset(flag2,0,sizeof(flag2));
		sort(a,a+n);
		sort(b,b+n);
		count=0;
		for(i=0;i<n;i++)//田忌从小开始的马 与秦王从大开始的马比较
		{
			for(j=n-1;j>=0;j--)
			{
				if(!flag2[j]&&a[i]>b[j])//如果大于 就记录 赢
				{
					flag1[i]=flag2[j]=1;
					count++;
					break;//只能比一对 break
				}
			}
		}
		for(i=0;i<n;i++)//没有比较过的马中若有相等 标记 平
		{
			for(j=0;j<n;j++)
			{
				if(!flag1[i]&&!flag2[j]&&a[i]==b[j])
				{
					flag1[i]=flag2[j]=1;
					break;//只能比一对 break
				}
			}
		}
		k=0;
		for(i=0;i<n;i++)//其他没有标记过的就是 输掉的
		{
			if(!flag1[i])
				k++;
		}
		printf("%d\n",200*(count-k));
	}
    return 0;
}

时间: 2024-10-10 01:36:37

poj 2287 Tian Ji -- The Horse Racing (贪心)的相关文章

poj 2287 Tian Ji -- The Horse Racing

poj 2287 Tian Ji -- The Horse Racing 题意: 田忌赛马 如果3匹马变成1000匹,齐王仍然让他的马按从优到劣的顺序出赛,田忌可以按任意顺序选择他的赛马出赛.赢一局,田忌可以得到200两银子,输一局,田忌就要输掉200两银子,平局的话不输不赢. 请问田忌最多能赢多少银子? 思路: 贪心: 如果当前最好的马可以胜齐王最好的马,那么让这两匹马比一场: 如果当前最差的马能胜齐王最差的马,那么让这两匹马比一场: 如果上面两个条件都不满足,那么让当前最差的马和齐王最好的马

POJ 2287 Tian Ji -- The Horse Racing(贪心)

题意:田忌和齐王有n匹马,进行n局比赛,每局比赛输者给胜者200,问田忌最多能得多少钱. 分析:如果田忌最下等的马比齐王最下等的马好,是没必要拿最下等的马和齐王最好的马比的.(最上等马同理) 因此,如果田忌最下等的马>齐王最下等的马或者田忌最上等的马>齐王最上等的马,直接得200,如果不满足该条件,那么才让田忌最下等的马与齐王最上等的马来比. #pragma comment(linker, "/STACK:102400000, 102400000") #include<

POJ 2287 - Tian Ji -- The Horse Racing(田忌赛马) 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:http://poj.org/problem?id=2287 题目大意: 田忌赛马的故事就不用多说了吧.... 输入包含多组数据(<=50),以0作为结束标志. 每组数据的第一行给出一个数n(n<=1000),表示齐王和田忌各有多少匹马. 第二行有n个数,表示田忌的马的速度值. 第三行有n个数,表示齐王的马的速度值. 在比赛中,速度值较大的马一定获胜.约定每局比赛中败者付给胜者200银币,平局则双方均无损失.问田忌

HDU1052 Tian Ji -- The Horse Racing 贪心

Tian Ji -- The Horse Racing Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1052 Description Here is a famous story in Chinese history. "That was about 2300 years ago. General Tian Ji was a

HDU 1052 Tian Ji -- The Horse Racing (贪心)

题意:田忌赛马,问你田忌最多能赢多少银子. 析:贪心,绝对贪心的题,贪心策略是: 1.如果田忌当前的最快的马能追上齐王的,那么就直接赢一局 2.如果田忌当前的最慢的马能追上齐王的,那么就直接赢一局 3.如果田忌当前的最慢的马不能超过齐王的,那么就输一局,并把齐王最快的干掉 通过以上策略,就是田忌赢的最多. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #incl

HDU ACM 1052 Tian Ji -- The Horse Racing 贪心

#include<iostream> #include<algorithm> using namespace std; int main() //贪心 { int n,money,i,j,i1,j1; int a[1005],b[1005]; while(cin>>n && n) { for(i=0;i<n;i++) cin>>a[i]; for(i=0;i<n;i++) cin>>b[i]; sort(a,a+n);

HDU-1052 Tian Ji -- The Horse Racing 贪心 考虑特殊位置(首尾元素)的讨论

题目链接:https://cn.vjudge.net/problem/HDU-1052 题意 田忌赛马问题扩展版 给n匹马,马的能力可以相同 问得分最大多少 思路 贪心做得还是太少,一开始一点思虑都没有的 这里稍微总结一下如何打开思路吧 从特殊位置开始考虑是否存在某种必然性,包括不限于序列首尾 若讨论难以进行,试着把这个讨论点展开,换个角度(或者换个特殊位置)讨论 首先排序 其次的关键是讨论尾元素是否必胜或必败,思考贪心 在一个关键是双方尾元素相同时,展开考虑首元素是否必胜或必败,思考贪心 当首

hdoj 1052 Tian Ji -- The Horse Racing【田忌赛马】 【贪心】

思路:先按从小到大排序, 然后从最快的開始比(如果i, j 是最慢的一端, flag1, flag2是最快的一端 ),田的最快的大于king的 则比較,如果等于然后推断,有三种情况: 一:大于则比較,二等于在推断田的最慢的是不是比king的最快的慢,三小于则与king的最快的比較: Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe

HDU 1052 Tian Ji -- The Horse Racing【贪心在动态规划中的运用】

算法分析: 这个问题很显然可以转化成一个二分图最佳匹配的问题.把田忌的马放左边,把齐王的马放右边.田忌的马A和齐王的B之间,如果田忌的马胜,则连一条权为200的边:如果平局,则连一条权为0的边:如果输,则连一条权为-200的边. 然而我们知道,二分图的最佳匹配算法的复杂度很高,无法满足N=2000的要求. 我们不妨用贪心思想来分析一下问题.因为田忌掌握有比赛的“主动权”,他总是根据齐王所出的马来分配自己的马,所以这里不妨认为齐王的出马顺序是按马的速度从高到低出的.由这样的假设,我们归纳出如下贪心