贪心算法之田忌赛马

原创 2018年04月17日 17:50:30

贪心策略如下:

如果田忌最快的马比齐王最快的马快

则田忌最快的马必定胜一场,最优策略是消耗掉齐王最快的马。

如果田忌最快的马比齐王最快的马慢

则齐王最快的马必定胜一场,最优策略是用田忌最慢的马去消耗齐王最快的马

如果田忌最快的马与齐王最快的马速度相同,则分为以下两个情形

1.田忌最慢的马比齐王最慢的马快

则齐王最慢的马必定输一场,最优策略是用田忌最慢的马去消耗齐王最慢的马

2.田忌最慢的马小于等于齐王最慢的马

此时田忌最慢的马必定不会赢一场,齐王最快的马必定不会输一场,则最优策略是用田忌最慢的马去消耗齐王最快的马


代码思路:用数组表示队列,维护头尾指针即可

#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <memory>
#include <math.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
int n;
int tianh[1005];
int qih[1005];
int main()
{
    while(cin >> n,n)
    {
        memset(tianh,0,sizeof(tianh));
        memset(qih,0,sizeof(qih));
        for(int i=0; i<n; i++)
            cin >> tianh[i];
        for(int i=0; i<n; i++)
            cin >> qih[i];
        int qhead = 0,qtail = n-1,thead=0,ttail=n-1;
        int money = 0;
        sort(tianh,tianh+n);
        sort(qih,qih+n);
        while(qhead<=qtail)
        {
            if(tianh[ttail] > qih[qtail])
            {
                money+=200;
                qtail--;
                ttail--;
            }
            else if(tianh[ttail] < qih[qtail])
            {
                money-=200;
                qtail--;
                thead++;
            }
            else
            {
                if(tianh[thead]>qih[qhead])
                {
                    money+=200;
                    thead++;
                    qhead++;
                }
                else
                {
                    if(tianh[thead]<qih[qtail])
                        money-=200;
                    thead++;
                    qtail--;
                }
            }
        }
        cout<<money<<endl;
    }
    return 0;
}

贪吃蛇教程

本课程为C语言控制台版贪吃蛇教程
  • 2017年07月07日 13:34

HDOJ田忌赛马--贪心算法

Input The input consists of up to 50 test cases. Each case starts with a positive integer n (n
  • a716121
  • a716121
  • 2015-06-10 16:47:12
  • 861

典型的贪心算法~ (田忌赛马 )

田忌赛马
  • u013514722
  • u013514722
  • 2014-07-31 15:08:20
  • 2711

田忌赛马-贪心正确性证明

算法可以用DP,或者给每匹马连线赋权变为二分图最佳匹配,还有就是贪心了。1.当田忌最慢的马比齐王最慢的马快,赢一场先2.当田忌最慢的马比齐王最慢的马慢,和齐王最快的马比,输一场3.当田忌最快的马比齐王...
  • mofixroot
  • mofixroot
  • 2009-07-29 22:19:00
  • 516

田忌赛马(Tian Ji -- The Horse Racing)中的动态规划以及贪心算法

这两天碰到一道看似很简单,但是实际做起来确实比较难的问题,在这里分析讨论一下。 题目:http://acm.hdu.edu.cn/showproblem.php?pid=1052 Tian Ji ...
  • lawrencesgj
  • lawrencesgj
  • 2012-09-20 20:58:16
  • 8728

NYOJ 364 田忌赛马(贪心)

田忌赛马 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 Here is a famous story in Chinese history. "That...
  • helloiamclh
  • helloiamclh
  • 2015-07-27 19:55:02
  • 666

田忌赛马问题c语言代码

  • 2009年04月23日 13:49
  • 858B
  • 下载

贪心算法--田忌赛马

田忌赛马 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述Here is a famous story in Chinese history. ...
  • qq_32688731
  • qq_32688731
  • 2017-04-24 09:26:04
  • 238

贪心算法 田忌赛马

声明,此题是一个典型的初级贪心,掌握此题的思想,就可以很好地得出代码,在做此题之前在网上找过解题思想,大概的都一样分为5个不同情况,思想明了,但代码过于复杂,对于像我这样的新手来说,看起来很烦躁,所以...
  • u013967628
  • u013967628
  • 2014-03-17 12:13:53
  • 749

编程基础-----田忌赛马

给定齐王与田忌的赛马各n匹怎么排顺序才能让田忌胜率更大呢? 首先对齐王与田忌的赛马分别进行由大到小的排序,分出马的等级来。 开始比赛: 把齐王的最差的马同田忌最差的马比较,结果有三种情况: 1、田...
  • yf210yf
  • yf210yf
  • 2013-08-25 13:29:56
  • 2437
收藏助手
不良信息举报
您举报文章:贪心算法之田忌赛马
举报原因:
原因补充:

(最多只允许输入30个字)