简述

手把手教会贪心算法之田忌赛马,超详细。

题目

田忌赛马
田忌和齐王赛马,两人各出n匹马,赢一场比赛得200两银子,输了赔200银子,平局不赔不赚.已知两人每匹马的速度,问田忌最多能赢多少银子.
多组测试数据,
每组数据的第一行是一个整数n。 (1<=n<=1000)
第二行包括n个整数既田忌每匹马的速度.
第三行包括n个整数既齐王每匹马的速度.
每匹马的速度不超过1000.
对于每组数据输出一行有一个整数代表田忌最多能赢多少银子
Sample Input
3
92 83 71
95 87 74
2
20 20
20 20
2
20 19
22 18
Sample Output
200
0
0

思路

其实就是一个简单的贪心算法,用最少的精力去赚得最多的财富。田忌要赢的最多,那么就要知道要用最坏的马去消耗齐王最好的马,接下来要考虑几件事情:
1,先要把马排一下序,从而使田忌更容易地用更慢的马去换掉齐王更快的马田忌最快的马。

 int cmp(int a,int b){return a>b;}int a[10000],b[10000];sort(a+1,a+n+1,cmp);//从快到慢sort(b+1,b+n+1,cmp);

2,接下来考虑策略。对于每一次比拼的考虑,如果田忌当前最快的马比齐王当前最快的马还快,那就要胜利次数加一,并且移除这两匹马(用过了不能再用)

if(a[fa]>b[fb]){cnt++;fa++;fb++;}

3,如果2不成立,那么就要考虑两人当前最慢的马的比拼,原理同上。

else if(a[la]>b[lb]){cnt++;la--;lb--;}

4,如果还是比不过,那就用田忌当前最差的马和齐王当前最好的马比拼(这样最值得),接下来有两种结果:①田忌输了(田忌当前最差的马比齐王当前最好的马要慢),那么胜利次数减一,移除这两匹马②万一平局(不可能胜利,因为前面田忌最好的马赢不过齐王),平局是什么情况呢?就是在上面三个判断都为否的情况下:对于平局(田忌最慢的马和齐王最快的马一样),以及2的判断(田忌最慢的马赢不过齐王最慢的马)。这两个条件可以知道,只有一种情况,齐王最快的马等于最慢的马(也就是只有一匹马了),加之平局,因此什么都不用操作。

else{if(a[la]<b[fb]){cnt--;la--;fb++;}}

实现

然后再把读入,读出,清零,最快最慢的马的赋值写上就是完整的代码了。

#include<bits/stdc++.h>
using namespace std;
int cmp(int a,int b){return a>b;
}//sort排序
int a[10000],b[10000];
int main(){int n,fa,fb,la,lb,cnt;while(cin>>n&&n!=0){for(int i=1;i<=n;i++){cin>>a[i];}//读入田忌的马for(int i=1;i<=n;i++){cin>>b[i];}//读入齐王的马sort(a+1,a+n+1,cmp);sort(b+1,b+n+1,cmp);fa=1;la=n;fb=1;lb=n;//赋值最快最慢的马cnt=0;for(int i=1;i<=n;i++){if(a[fa]>b[fb]){cnt++;fa++;fb++;//(在数组里通过移动此变量的位置来实现当前最快最慢的马的赋值)}else if(a[la]>b[lb]){cnt++;la--;lb--;}else{if(a[la]<b[fb]){cnt--;la--;fb++;}}
}
cout<<cnt*200<<endl;
}return 0;
}

HOORUS 巨献

贪心算法之田忌赛马(超详细)相关推荐

  1. 点云处理算法整理(超详细教程)

    点云处理算法整理(超详细教程) 目录 一. 线性回归_最小二乘法.梯度下降法 二. 线性回归_最小二乘法.RANSAC算法 三. 最近点迭代_ICP算法 四. 常见三角网格划分_voronoi图和De ...

  2. 田忌赛马贪心算法_贪心算法之田忌赛马

    你一定听过田忌赛马的故事吧?       如果3匹马变成1000匹,齐王仍然让他的马按从优到劣的顺序出赛,田忌可以按任意顺序选择他的赛马出赛.赢一局,田忌可以得到200两银子,输一局,田忌就要输掉20 ...

  3. 田忌赛马贪心算法_田忌赛马 贪心算法

    算法实验课回顾 田忌赛马 问题描述: 你一定听说过田忌赛马的故事吧?如果3匹马变成n匹(n<=100),齐王仍然让他的马按照优到劣的顺序初赛,田忌可以按任意顺序选择他的赛马出赛.赢一局,田忌可以 ...

  4. 田忌赛马贪心算法_田忌赛马问题——贪心算法

    关于输入 输入包含多组测试数据. 每组测试数据的第一行是一个整数n(1<=n<=1000),表示田忌和齐王都拥有n匹马.接下来一行是n个整数,表示田忌的马的速度,下一行也是n个整数,表示齐 ...

  5. 单目标跟踪--KCF算法(核化相关滤波算法)Python实现(超详细)

    Tracking-KCF Algorithm 注:本文涉及的算法的代码实践已上传至GitHub,恳求大佬们指点!^ _ ^ 1. 目标检测跟踪与算法背景概述 ​ 目标跟踪任务在许多的计算机视觉系统中都 ...

  6. 十大经典排序算法----堆排序(超详细)

    目录 1. 堆排序的基础知识 1.1 大顶堆&&小顶堆 1.2 向下调整算法 1.3 物理结构与逻辑结构的关系 2. 堆排序详解 2.1 堆排序整体思路 2.2 思路详解 2.2.1  ...

  7. 田忌赛马贪心算法_贪心算法解决田忌赛马

    田忌赛马--对策问题 教学目标: 1.通过简单的事例,使学生初步体会对策论在解决... 梁锦美有无课件 上课时间 有 12 月 15 日 1 田忌赛马中的数学问题 课时... 同学们,你听过" ...

  8. 点云处理算法整理(超详细教程)十大点云数据处理技术梳理

    研究点云数据时,感觉无从下手? 看看这十大点云数据处理技术,换个思路学点云. 点云 · 定义 简言之,在获取物体表面每个采样点的空间坐标后,得到的是一个点的集合,称之为"点云".包 ...

  9. 9种常用排序算法总结(超详细)

    以int型数据为例,且0号下标数组用来做为交换辅助空间,数据从1号下标开始存储 一.插入排序 基本思想:每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到全部待排序 ...

  10. 田忌赛马贪心算法_acm田忌赛马问题在线等急求!!

    这个是问题:这里有一个非常著名的中国故事."大约2300年以前,田忌将军是齐国高级官员,他喜欢和国王还有其它的人赛马"."田忌和国王都有3匹不同档次的马,即普通的,好的, ...

最新文章

  1. 网友们票选的2018 Best Paper,你pick谁?
  2. 拜托,面试别再问我JVM了!!!
  3. pandas实现众数和众数的频数
  4. ubuntu 下 SubLime Text2 使用之创建快捷方式
  5. 日期DatePicker与时间TimePicker控件
  6. c# WinForm英雄联盟挂机源码及实现原理
  7. 每天一个知识点:Python列表两个冒号加一个负数的表达方法
  8. centos7 开机启动脚本
  9. treemap底层结构_HashMap面试必问的数据结构相关知识总结
  10. JSP教程第5讲笔记
  11. 计算机网络和综合布线的关系,浅谈计算机网络综合布线的合理性
  12. NXP JN5169 使用硬件 SPI 从机收发数据
  13. 201871010114-李岩松《面向对象程序设计(java)》第四周学习总结
  14. 使用pr给视频局部打马赛克
  15. vnc连接服务器怎么修改配置,VNC配置最详细易懂教程-图文并茂
  16. MMAction2学习笔记 使用C3D训练测试自己的数据集
  17. 【Unity3D游戏开发学习笔记】(六)上帝之手—GameObject的操作
  18. 解决:浏览器下载的Excel文件显示“文件已损坏,无法打开”
  19. otg usb 定位_什么是USB OTG?USB OTG是什么意思
  20. 苹果手机的隐藏功能分享

热门文章

  1. matlab mcc-m,【matlab】matlab中 mcc、mbuild和mex命令详解
  2. mysql 查询 本周 上周,Mysql查询本周,上周,本月,上月数据
  3. 新手安卓开发详细教程
  4. Android中使用字体文件
  5. 用JavaScript时钟特效
  6. 【pandas】reset_index函数详解
  7. 路由器刷openwrt后不能上网 修改brlan的ip地址失败
  8. 结构化数据和非结构化数据、半结构化数据的区别
  9. win10联网进入msn页面,信号出现感叹号
  10. 任务栏优化工具TrueLaunchBar_我是亲民_新浪博客