题意是田忌赛马的背景,双方各有n匹马,下面两行分别是田忌和齐王每匹马的速度,要求输出田忌最大的净胜场数*每场的赌金200。

开始的时候想对双方的马匹速度排序,然后比较最快的马,能胜则胜,否则用最慢的马去消耗对方,但这样存在问题:1 2 3 对 1 3 3的时候,会变成1 - 3,2 - 3,3 - 1,净胜-1场,而实际存在1 - 3,2 - 1,3 - 3的净胜0场的策略;

然后自然想到的是要对平局进行特殊处理,当双方最快的马能战平时,比较最慢马,如果最慢马能胜对方,就用最慢马胜对方,然后让两方最快马战平,但是:2 3 5 对 1 4 5的时候,会变成 2 - 1,3 - 4,5 - 5,净胜0场,而实际存在2 - 1,3 - 5,5 - 4的净胜1场的策略;

......

惊觉自己不断拆墙补墙的做法导致自己的策略不够完整,逻辑也不够严密,借鉴了别人的代码,才得出较为严密的策略:

以双方最慢的马比较,若田忌最慢的马比齐王最慢的马快,则本场用双方最慢的马比赛;若田忌最慢的马比齐王最慢的马慢,则本场用田忌最慢的马和齐王最快的马比赛;若两方最慢的马速度一样,则比较两方最快的马;若田忌最快的马快于齐王最快的马,本场用双方最快的马比赛,(若田忌最快的马和齐王最快的马一样快,暂不处理,保留;若田忌最快的马比齐王最快的马慢,则用田忌最慢的马去消耗齐王最快的马。)这里只比较田忌最慢的马和齐王最快的马即可。

 #include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
int cnt,n,pafast,pbfast,paslow,pbslow,ans,a[],b[];
while(~scanf("%d",&n)&&n)
{
for(int i = ; i < n; i++) scanf("%d",&a[i]);
for(int i = ; i < n; i++) scanf("%d",&b[i]);
sort(a,a+n);
sort(b,b+n);
pafast = pbfast = n-;
paslow = pbslow = ;
ans = cnt = ;
for(int i = ; i < n; i++)
{
if(a[paslow] > b[pbslow]) //当前田忌慢马快于齐王慢马
{
paslow++;
pbslow++;
ans++;
}
else if(a[paslow] < b[pbslow]) //当前田忌慢马慢于齐王慢马,选择与齐王快马比
{
paslow++;
pbfast--;
ans--;
}
else //当前田忌慢马与齐王慢马一样
{
if(a[pafast] > b[pbfast]) // 当前田忌快马快于齐王快马
{
pafast--;
pbfast--;
ans++;
}
else if(a[paslow] < b[pbfast]) // 当前田忌慢马慢于齐王快马,选择与齐王快马比
{
paslow++;
pbfast--;
ans--;
}
}
}
printf("%d\n",ans*);
}
return ;
}

个人觉得非常漂亮的分析:https://www.cnblogs.com/anderson0/archive/2011/05/07/2039971.html

(希望以后也能写出如此漂亮的分析...)

HDU 1052(田忌赛马 贪心)的更多相关文章

  1. hdu 1052 田忌赛马

    贪心,排序从大到小.. 先比大的.跑只是就拿最小的来送死.. , 假设是平局就比后面的... 若后面也是平局就拿去跟前面的去跑. .. #include<stdio.h> #include ...

  2. HDU 1052 Tian Ji -- The Horse Racing (贪心)(转载有修改)

    Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  3. HDU 1052

    http://acm.hdu.edu.cn/showproblem.php?pid=1052 田忌赛马本质就是一个贪心 res表示田忌的胜利场次 1.田忌最快马快于王的最快马,两个最快马比,res++ ...

  4. Tian Ji -- The Horse Racing HDU - 1052

    Tian Ji -- The Horse Racing HDU - 1052 (有平局的田忌赛马,田忌赢一次得200块,输一次输掉200块,平局不得钱不输钱,要使得田忌得到最多(如果只能输就输的最少) ...

  5. Hdu 4864(Task 贪心)(Java实现)

    Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...

  6. D - 淡黄的长裙 HDU - 4221(贪心)

    D - 淡黄的长裙 HDU - 4221(贪心) James is almost mad! Currently, he was assigned a lot of works to do, so ma ...

  7. HDU 1052 Tian Ji -- The Horse Racing(贪心)(2004 Asia Regional Shanghai)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1052 Problem Description Here is a famous story in Ch ...

  8. HDU 1052 贪心+dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1052 Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS ...

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

    题目来源:1052 题目分析:题目说的权值匹配算法,有点误导作用,这道题实际是用贪心来做的. 主要就是规则的设定: 1.田忌最慢的马比国王最慢的马快,就赢一场 2.如果田忌最慢的马比国王最慢的马慢,就 ...

随机推荐

  1. 启发式合并&线段树合并/分裂&treap合并&splay合并

    启发式合并 有\(n\)个集合,每次让你合并两个集合,或询问一个集合中是否存在某个元素. ​ 我们可以用平衡树/set维护集合. ​ 对于合并两个\(A,B\),如果\(|A|<|B|\),那么 ...

  2. IDEA中Maven项目使用Junit4单元测试的写法

    IDEA默认是安装了junit控件的,直接使用就好了 在maven项目的pom.xml文件中添加依赖 <dependency> <groupId>junit</group ...

  3. 华为TaiShan 2280 ARM 服务器

    华为TaiShan 2280 ARM 服务器 华为TaiShan 2280 ARM 服务器  https://e.huawei.com/cn/products/cloud-computing-dc/s ...

  4. 【宝塔linux】 导入mysql 大文件失败的问题

    导入数据库有四种方法 1.宝塔网站自带的数据库导入 2.phpmyadmin导入 3.远程到linux服务器用导入命令 使用xshell进入到控制台 1.首先建空数据库 mysql>create ...

  5. Hdoj 1050.Moving Tables 题解

    Problem Description The famous ACM (Advanced Computer Maker) Company has rented a floor of a buildin ...

  6. 【dfs】P1331 海战

    题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防海军部仅有很少的几 ...

  7. 【Linux】Linux系统中的权限详解

    我们linux服务器上有严格的权限等级,如果权限过高导致误操作会增加服务器的风险.所以对于了解linux系统中的各种权限及要给用户,服务等分配合理的权限十分重要. 一.文件基本权限 首先看下linux ...

  8. 【redis】redis常用命令及操作记录

    redis-cli是Redis命令行界面,可以向Redis发送命令,并直接从终端读取服务器发送的回复. 它有两种主要模式:一种交互模式,其中有一个REPL(read eval print loop), ...

  9. BAT脚本实例

    一个简单的BAT脚本实例,重点在于说明各命令用法: @ ECHO OFF REM 打开ECHO回显 echo 1.列出C盘根目录中所有文件 pause dir C:\ echo. echo 2.等待1 ...

  10. Home School Books美国家庭学校教育小学初中高中全套美语教材

    加州的资料总共买过三次: ①优妈妈儿童教育,买过美国加州小学一.二年级的语文及相应的练习册,并买了纸版资料. (这是自己学习用的) ②美国加州原版小学教材Reading Wonders 2014新版语 ...