Tian Ji -- The Horse Racing/田忌赛马

一:杭电原题摘录

http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=1&sectionid=3&problemid=4

二.题目分析

田忌赛马的故事我们都知道,总共有三匹马,用自己最差的马和齐王的最好的马比.举个三匹马田忌能赢的例子

田忌齐王胜利方
9295齐王
8387齐王
7174田忌

调整策略之后 

田忌齐王胜利方
7195齐王
9287田忌
8374田忌

这个例子很简单,为什么要废话一堆,还画两个表格.

我想让大家体会到策略的数学模型化.就是怎么用数学语言来表达这个策略?还有就是田忌的策略到底全不全?因为我们是站在通用的法则之上,一个部分对的答案在逻辑上站不住脚,更不用说在此基础上进行的编程.

但至少这个例子可以让我们管中窥豹,可见一斑.

首先,我们必须先将两家的马匹性能数据按从大到小排列,排序在分析某些特性问题上的关键性已经不想在重复.刚刚田忌那个策略是一个;

然后呢?如果田忌的最好的马匹比齐王最好的马匹好那么你说他会不会拿自己这匹马和齐王其它的(也就不是最好的任一个比)比,很显然不会.直接刚就完事了;

还有呢?如果田忌的最差的马匹比齐王最差的马匹好那么你说他会不会拿自己这匹马和齐王其它的比,有些人说我跟齐王最好的马比啊.你忘了那个策略的前提是:田忌的马整体上性能没有齐王的好.最差的马什么时候都有.我们为什么不放到我们最差的马比齐王最差的马还要差的时候,再想骚操作呢?

骚操作是在实力不行的时候想的,当我们实习整体上比别人强的时候为什么不直接刚呢?这又不是三国,只是田,齐两方的争斗.这才是完整的策略.这不就是中美贸易战美方硬刚的原因.(题外话,一不小心偏了...)

三.我的收获

想全策略的基础上,还要能转化为编程语言(显然前者更重要)

四.AC代码

#include<cstdio>
#include<algorithm>
using namespace std;
int cmp(int a,int b)
{
    return a>b;
}
int main()
{
    int a[1005],b[1005];
    int n;
    while(scanf("%d",&n),n)
    {
        for(int i=0; i<n; i++)
            scanf("%d",&a[i]);
        for(int i=0; i<n; i++)
            scanf("%d",&b[i]);
        sort(a,a+n,cmp);
        sort(b,b+n,cmp);
        int TFirst=0,QFirst=0;
        int TEnd=n-1,QEnd=n-1;
        int win=0;
        while(n--)
        {
            if(a[TFirst]>b[QFirst])//田忌最快的马比齐王最快的快
            {
                TFirst++,QFirst++;
                win++;
            }
            else if(a[TEnd]>b[QEnd])//田忌最慢的马比齐王最慢的快
            {
                TEnd--,QEnd--;
                win++;
            }
            else if(a[TEnd]<b[QFirst])//用田忌最慢的马与齐王最快的马比
            {
                win--,TEnd--;
                QFirst++;
            }
        }
        printf("%d\n",win*200);
    }
    return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值