田忌赛马问题——贪心算法
关于输入
输入包含多组测试数据. 每组测试数据的第一行是一个整数n(1<=n<=1000),表示田忌和齐王都拥有n匹马。接下来一行是n个整数,表示田忌的马的速度,下一行也是n个整数,表示齐王的马的速度。 输入的最后以一个0表示结束。
关于输出
对每组数据,如果田忌能赢则输出“WIN”;如果田忌能输则输出“LOSE”;如果比赛平局则输出“DRAW”
解题思路: 算法可以用DP,或者给每匹马连线赋权变为二分图最佳匹配,还有就是贪心了。 1.当田忌最慢的马比齐王最慢的马快,赢一场先 2.当田忌最慢的马比齐王最慢的马慢,和齐王最快的马比,输一场 3.当田忌最快的马比齐王最快的马快时,赢一场先。 4.当田忌最快的马比齐王最快的马慢时,拿最慢的马和齐王最快的马比,输一场。 5.当田忌最快的马和齐王最快的马相等时,拿最慢的马来和齐王最快的马比
. 田忌赛马贪心的正确性证明
先说简单状况下的证明: 1.当田忌最慢的马比齐王最慢的马快,赢一场先。因为始终要赢齐王最慢的马,不如用最没用的马来赢它。 2.当田忌最慢的马比齐王最慢的马慢,和齐王最快的马比,输一场。因为田忌最慢的马始终要输的,不如用它来消耗齐王最有用的马。 3.当田忌最慢的和齐王最慢的马慢相等时,分4和5讨论。 4.当田忌最快的马比齐王最快的马快时,赢一场先。因为最快的马的用途就是来赢别人快的马,别人慢的马什么马都能赢。 5.当田忌最快的马比齐王最快的马慢时,拿最慢的马和齐王最快的马比,输一场,因为反正要输一场,不如拿最没用的马输。 6.当田忌最快的马和齐王最快的马相等时,这就要展开讨论了,贪心方法是,拿最慢的马来和齐王最快的马比. 前面的证明像公理样的,大家一看都能认同的,没有异议的,就不细说了。
证明:田忌最快的马和齐王最快的马相等时拿最慢的马来和齐王最快的马比有最优解。 可以举例来证明,比较容易理解。
#include <iostream>
#include <algorithm>//使用sort函数要引用的头文件
using namespace std;
int main()
{
int a[100000],b[100000],n,i,j;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
for(j=0;j<n;j++)
cin>>b[j];
sort(a,a+n); //用函数sort(数组名,数组名+范围)使用sort函数要引用头文件#include <algorithm>且默认升序,限制是只能排int型和double型 不能排char型
sort(b,b+n);
int win = 0;
int fail = 0;
int ib = 0, jb = 0;
int ie = n - 1, je = n - 1;
while (ib <= ie)
{
if (a[ie] > b[je]) //.当田忌最慢的马比齐王最慢的马快,赢一场先,因为始终要赢齐王最慢的马,不如用最没用的马来赢它
{
win++;
ie--;
je--;
}
else if (a[ie] < b[je]) //当田忌最慢的马比齐王最慢的马慢,和齐王最快的马比,输一场。因为田忌最慢的马始终要输的,不如用它来消耗齐王最有用的马
{
fail++;
ie--;
jb++;
}
else
{
if (a[ib] > b[jb]) //当田忌最快的马比齐王最快的马快时,赢一场先。因为最快的马的用途就是来赢别人快的马,别人慢的马什么马都能赢。
{
win++;
ib++;
jb++;
}
else
{
if (a[ie] < b[jb])//.当田忌最快的马比齐王最快的马慢时,拿最慢的马和齐王最快的马比,输一场
fail++;
ie--;
jb++;
}
}
}
if(win>fail)
{
cout<<"WIN";
}
else
if(win<fail)
{
cout<<"LOSE";
}
else if(win=fail)
{
cout<<"DRAW";
}
return 0;
}
田忌赛马问题——贪心算法相关推荐
- 用c语言实现田忌赛马(贪心算法)
用C语言实现田忌赛马(贪心算法) *首先,我们来回顾一下田忌赛马的题目. **题目描述] "田忌赛马"是历史上有名的揭示如何善用自己的长处去对付对手的短处,从而在竞技中获胜的事例. ...
- 田忌赛马贪心算法_田忌赛马问题——贪心算法
关于输入 输入包含多组测试数据. 每组测试数据的第一行是一个整数n(1<=n<=1000),表示田忌和齐王都拥有n匹马.接下来一行是n个整数,表示田忌的马的速度,下一行也是n个整数,表示齐 ...
- 田忌赛马(贪心算法)C++
贪心策略: 1,如果田忌的最快马快于齐王的最快马,则两者比. (因为若是田忌的别的马很可能就赢不了了,所以两者比) 2,如果田忌的最快马不快于齐王的最快马,则比较田忌的最慢马和齐王的最慢马 2.1,若 ...
- Tian Ji -- The Horse Racing(田忌赛马)/贪心算法
Tian Ji – The Horse Racing(田忌赛马) 田忌赛马的故事 (可以直接看题) Here is a famous story in Chinese history. "T ...
- 55天 - 贪心算法 - 田忌赛马问题 openjudge百炼 2287
//模板#include <iostream> #include <cstdio> #include <string> #include <algorithm ...
- 贪心算法 田忌赛马问题
贪心算法 田忌赛马问题 这个题目贪心的本质在于:*田忌只在有把握赢的情况下拿出快马和王拼,否则用最慢的马比掉王的快马最大程度削弱王的战斗力 贪心策略: 1,如果田忌的最快马快于齐王的最快马,则两者比. ...
- POJ2287 田忌赛马---贪心算法
田忌赛马 题目详见http://poj.org/problem?id=2287 田忌赛马大家都听过,可是如果不是上中下三等马,而是很多匹马,优劣有很多种分类,就不仅仅是321的问题了. 这个很明显就是 ...
- 典型的贪心算法~ (田忌赛马 )
1. 田忌赛马 典型的贪心算法~~自己木有考虑到贪心的第二步导致wa了好多次 算法分析 Problem Description: 给出2N组数据,分别表示田忌和齐威王的N匹马的速度,没进行一场比赛( ...
- 田忌赛马贪心算法_贪心算法之田忌赛马
你一定听过田忌赛马的故事吧? 如果3匹马变成1000匹,齐王仍然让他的马按从优到劣的顺序出赛,田忌可以按任意顺序选择他的赛马出赛.赢一局,田忌可以得到200两银子,输一局,田忌就要输掉20 ...
最新文章
- 51nod 修改数组
- Subversion 1.5 安装配置指南
- qt整个窗口上绘制矩形与在窗口的子控件上绘制矩形
- 国内一些大公司的开源项目
- 【VMware虚拟机】使用SSH连接VMware上的Linux虚拟机(主机互通也可访问外网)
- java 代码检验表不存在_诊断 Java 代码: Liar View 错误模式
- win10和win7游戏测试软件,Win10系统和Win7玩游戏哪个更快?评测在这里!
- php tr td,php-基于tr计数的Td / th的XPath
- 题解 CF1027D 【Mouse Hunt】
- 一起谈.NET技术,疯狂的想法——基于.NET的软件超市平台构想与5年实现之路
- wps下一步快捷键_WPS中快捷键有哪些
- 【CSS3】模拟太阳系八大行星运行轨迹
- 前端PDF文件转图片方法(你值得收藏)
- 别嫌工资少,高薪资的标准你符合几条
- tex排版,论文中图片转为eps格式,(pdf,visio转pes)eps图显示不完全
- Kafka HW及Epoch
- Ardupilot-链接汇总
- 中国工程师最喜欢的10大TWS耳机电源管理芯片,钰泰ETA9084名列其中
- 输入法编程相关资源汇集
- 安卓中两种压缩图片详解(比例压缩与质量压缩)
热门文章
- 使用css选择器容易犯的一个小错误
- VueUse——一个提升开发效率的Vue3工具库,让你早早下班
- 固定位置的左导航(有瑕疵)
- 关于用户体验,我有6点零星想法
- org.apache.axis2.AxisFault: test.super.com
- 购物兔发布新版1.0.11.47
- 【SpringBoot】40、SpringBoot中使用Aspose将文件转为PDF实现在线预览
- field data-es控制聚合内存使用-elasticsearch权威指南翻译
- 【Python入门】Turtle海龟库:利用海龟画笔绘制花瓣轮廓
- 如何防止僵尸物联网,新华三应对有术