田忌赛马
来源:互联网 发布:淘宝借贷利息 编辑:程序博客网 时间:2024/05/16 00:30
Description
中国古代的历史故事“田忌赛马”是为大家所熟知的。话说齐王和田忌又要赛马了,
他们各派出N匹马(N≤2000),每场比赛,输的一方将要给赢的一方200两黄金,
如果是平局的话,双方都不必拿出钱。现在每匹马的速度值是固定而且已知的,
而齐王出马也不管田忌的出马顺序。请问田忌该如何安排自己的马去对抗齐王的马,才能赢最多的钱?
他们各派出N匹马(N≤2000),每场比赛,输的一方将要给赢的一方200两黄金,
如果是平局的话,双方都不必拿出钱。现在每匹马的速度值是固定而且已知的,
而齐王出马也不管田忌的出马顺序。请问田忌该如何安排自己的马去对抗齐王的马,才能赢最多的钱?
Input
本题有多组测试数据,整个测试以数字零代表结束.
每组数据的第一行给出数字N,代表有多少匹马
第二行,给出田忌的每匹马的速度
第三行,则给出齐王的.
每组数据的第一行给出数字N,代表有多少匹马
第二行,给出田忌的每匹马的速度
第三行,则给出齐王的.
Output
输出田相最多可以赚到多少钱.
Sample Input
392 83 7195 87 740
Sample Output
200
这道题是一道贪心的题目,只要你看过田忌赛马的故事,就很容易想到这道题大致的贪心路线,事实确实是这样。
现在列举一下
1、如果田忌的最慢的马要比齐王最慢的马快,先赢一场,这是肯定的。
2、如果田忌的最慢的马要比齐王最慢的马慢,就输给齐王最快的马,反正都是要输。
3、如果田忌的最快的马要比齐王最快的马慢,就拿田忌最慢的马去输。
4、如果田忌最快的马要比齐王最快的马快,就赢一场,这样的话价值最大,因为田忌最快的马要比齐王最快的都要快,就必定能赢一场,不如解决齐王实力最强的马。
看起来就只有这么多,然而是有例外的
那就是当最慢的马或是最快的马相等的时候,这个就不列举了,因为也是上面的处理方式,具体参考代码
代码:
#include<bits/stdc++.h>using namespace std;int h1,h2,t1,t2,n,i,ans=0;int t[100001],k[100001];int cmp(int a,int b){ return a>b;}int main(){ while(cin>>n&&n) { for(i=1;i<=n;i++)cin>>t[i]; for(i=1;i<=n;i++)cin>>k[i]; sort(t+1,t+n+1,cmp); sort(k+1,k+n+1,cmp); h1=h2=1; t1=t2=n; while(h1<=t1) { if(t[h1]>k[h2]) ans+=200,h1++,h2++; else { if(t[h1]<k[h2]) ans-=200,t1--,h2++; else { if(t[t1]>k[t2]) ans+=200,t1--,t2--; else { if(t[t1]<k[h2]) ans-=200; t1--,h2++; } } } } cout<<ans<<endl; ans=0; }}
阅读全文
0 0
- 田忌赛马
- 田忌赛马
- 田忌赛马
- 田忌赛马
- nyoj364(田忌赛马)
- 田忌赛马
- nyoj364田忌赛马
- HDOJ1052田忌赛马
- acm-田忌赛马
- 田忌赛马
- 田忌赛马
- NYOJ364 田忌赛马
- nyoj364田忌赛马
- LA3266田忌赛马
- 田忌赛马
- 田忌赛马
- 田忌赛马
- poj2287 田忌赛马
- 算法设计与分析
- React Native原生模块的基本使用
- 不相交集ADT-概述
- window ,linux yaf创建目录
- poj1847Tram 最短路 floyd dijkstra
- 田忌赛马
- Ionic+Angularjs+Cordova开发跨平台混合式移动应用
- 前端基本功—js第三天
- Android 代码优化工具FindBugs
- 如何让机器拥有人类的智慧?| 论文访谈间 #09
- cinder基本使用
- HDU 6154 CaoHaha's staff(找规律)
- 记录一次ELK集群优化
- 使用Nexus创建Maven私有仓库