田忌赛马——贪心算法(附加别人写的动态规划)
来源:互联网 发布:js是什么防水材料 编辑:程序博客网 时间:2024/06/05 16:52
给出2N组数据,分别表示田忌和齐威王的N匹马的速度,没进行一场比赛(每组数据共N场场赛),若能分出胜负,则输的一方要给赢的一方200Y¥(银元),求田忌以怎样的策略才能赚取最多的老婆本。
这道题看了好几天,也看了很多版本,今天终于真的懂了
贪心算法的思路:
首先建两个数组用来存放齐王和田忌的马速
排序马速
1如果田忌的快马比齐王的快,那么不论怎样都是赢的
2如果齐王的慢马比田忌的慢马慢,那么田忌用慢马和齐王的慢马比,肯定赢的
3如果慢马一样快,那么分下面的讨论:
4,在3的基础上,田忌的快马快,那么对阵齐王的快马肯定赢一场
5在3 的基础上,田忌的快马慢,那么不论怎样都会输一个,所以就拿最慢的和最快的比较
6快马相等,贪心的开始
//田忌赛马---贪心算法#include<stdio.h>#include<algorithm> using namespace std;int a[1001],b[1001];//定义两个数组a为田忌,b为齐王 int main(){int i,j,n,money=0,cnt=0;while(~scanf("%d",&n)&&n){for(i=0;i<n;i++){ //初始化两个数组 scanf("%d",&a[i]);}for(j=0;j<n;j++){scanf("%d",&b[j]);}sort(a,a+n);//默认升序 sort(b,b+n);intmaxnuma=n-1;intmaxnumb=n-1;intminnuma=0;intminnumb=0;while(cnt<n){if(a[maxnuma]>b[maxnumb]){money+=200;maxnuma--;maxnumb--;cnt++;}else if(a[maxnuma]<b[maxnumb]){money-=200;minnuma++;maxnumb--;cnt++;}else if(a[maxnuma==maxnumb]){maxnuma--;maxnumb--;cnt++;}else{if(a[minnuma]>b[minnumb]){money+=200;minnuma++;minnumb++;cnt++;}else if(a[minnuma]<b[maxnumb]){money-=200;minnuma++;maxnumb--;cnt++;}}}printf("%d\n",money);}return 0;}http://blog.csdn.net/lawrencesgj/article/details/8001638
他用动规写了,他贴出的别人的贪心算法,中间有个问题,当测试数据为
2
20 20
20 20时,输出不为0
我看了一下好像是没有这块的比较,
阅读全文
0 0
- 田忌赛马——贪心算法(附加别人写的动态规划)
- 田忌赛马(Tian Ji -- The Horse Racing)中的动态规划以及贪心算法
- 田忌赛马(Tian Ji -- The Horse Racing)中的动态规划以及贪心算法
- 田忌赛马 poj 2287 (贪心,动态规划,贪心+动态规划)
- 算法笔记--贪心(田忌赛马)
- 典型的贪心算法~ (田忌赛马 )
- 【动态规划】田忌赛马
- 贪心算法 田忌赛马
- 贪心算法--田忌赛马
- 算法竞赛学习笔记—田忌赛马(贪心法)
- hdu1052 田忌赛马 —— 贪心
- HDU1052——田忌赛马(贪心)
- 贪心——田忌赛马(HDU1052)
- 田忌赛马(贪心)
- 贪心算法 田忌赛马(problem C)
- c/C++ 田忌赛马(贪心算法)
- 贪心算法之田忌赛马
- POJ2287 田忌赛马---贪心算法
- hostapd移植笔记
- Java异常总结
- AVL树的实现(C++)
- 安卓常用工具类-SoftKeyboardUtils【软件盘工具类】
- [DL]机器学习算法之支持向量机(Support Vector Machine)
- 田忌赛马——贪心算法(附加别人写的动态规划)
- VMware Ubuntu 全屏
- 【C++】inet_ptoa&inet_atop inet_pton&inet_ntop
- 基于51单片机的无线通讯公交报站系统
- 第四天-运算符
- 安装 cobra
- java线程之间的通信(等待/通知机制)
- 第十章:对象和类
- JUnit测试工具