uva1344/ HDU1052:Tian Ji -- The Horse Racing
来源:互联网 发布:label mx 破解软件 编辑:程序博客网 时间:2024/04/26 22:10
摘自http://www.cnblogs.com/anderson0/archive/2011/05/07/2039971.html
先对田忌和国王的马进行排序,我是从小到大排序的。
贪心的策略:
一、当田忌最快的马比国王最快的马快时,用田忌最快的马赢国王最快的马。
二、当田忌最快的马比国王最快的马慢时,用田忌最慢的马输给国王最快的马。
三、当田忌最快的马跟国王最快的马一样快时,分情况。
其实上面这两个很容易就想得到,最难的是相等的时候。因为不可以直接让田忌最快的马跟国王最快的马打平,或者直接用最慢的马去输给国王最快的马。(存在反例)
1、如果选择全部打平,那么对于田忌 1 2 3 4,国王 1 2 3 4 ,这组数据,田忌什么黄金也得不到。但是如果选择 1->4, 4->3, 3->2, 2->1田忌可以得到400两黄金。 (大雄想的)
2、如果选择用最慢的马输掉比赛的话,对于田忌 3 4,国王 1 4 ,这组数据,田忌一胜一负,什么黄金也得不到,但是如果田忌选择 3->1 , 4->4 ,一胜一平,田忌可以得到200两黄金。
所以:对于情况三,我们应该从最慢的马开始考虑了
1、当田忌最慢的马比国王最慢的马快,那么用田忌最慢的马赢国王最慢的马
2、当田忌最慢的马比国王最慢的马慢,那么用田忌最慢的马输给国王最快的马
3、当田忌最慢的马跟国王最慢的马相等的时候,用田忌最慢的马跟国王最快的马比
/*********************************************** * Author: fisty * Created Time: 2015/2/7 17:54:02 * File Name : uva1344.cpp *********************************************** */#include <iostream>#include <cstring>#include <deque>#include <cmath>#include <queue>#include <stack>#include <list>#include <map>#include <set>#include <string>#include <vector>#include <cstdio>#include <bitset>#include <algorithm>using namespace std;#define Debug(x) cout << #x << " " << x <<endl#define Memset(x, a) memset(x, a, sizeof(x))const int INF = 0x3f3f3f3f;typedef long long LL;typedef pair<int, int> P;#define FOR(i, a, b) for(int i = a;i < b; i++)#define MAX_N 1100int n;int Tian[MAX_N];int King[MAX_N];int main() { //freopen("in.cpp", "r", stdin); cin.tie(0); ios::sync_with_stdio(false); while(cin >> n){ if(!n) break; FOR(i, 0, n){ cin >> Tian[i]; } FOR(i, 0, n){ cin >> King[i]; } sort(Tian, Tian + n); sort(King, King + n); int T_max = n-1, K_max = n-1, T_min = 0, K_min = 0; int ans = 0; while(T_min <= T_max && K_min <= K_max){ if(Tian[T_max] > King[K_max]){ //当田忌最快的马比齐王最快的马快 T_max--; K_max--; ans += 200; }else if(Tian[T_max] < King[K_max]){ //当田忌最快的马比齐王最快的马慢的时候 //用田忌最慢的马和齐王最快的马比 T_min++; K_max--; ans -= 200; }else{ //当两者相等时 if(Tian[T_min] > King[K_min]){ //当田忌最慢的马比齐王最慢的马快 T_min++; K_min++; ans += 200; }else if(Tian[T_min] < King[K_min]){ //当田忌最慢的马比齐王最慢的马慢 //用最慢的马输给齐王最快的马 T_min++; K_max--; ans -= 200; }else{ //田忌最慢的马和齐王最慢的马相等 //用最慢的马和齐王最快的马相比 if(Tian[T_min] < King[K_max]) ans -= 200; T_min++; K_max--; } } } cout << ans << endl; } return 0;}
0 0
- uva1344/ HDU1052:Tian Ji -- The Horse Racing
- UVA1344 - Tian Ji -- The Horse Racing
- POJ2287/UVA1344 Tian Ji -- The Horse Racing
- HDU1052 Tian Ji -- The Horse Racing(贪心)
- HDU1052:Tian Ji -- The Horse Racing
- hdu1052-Tian Ji -- The Horse Racing
- hdu1052 Tian Ji -- The Horse Racing
- HDU1052 Tian Ji -- The Horse Racing【贪心】
- Tian Ji -- The Horse Racing HDU1052
- hdu1052 Tian Ji -- The Horse Racing 贪心
- HDU1052 Tian Ji -- The Horse Racing 贪心
- HDU1052 Tian Ji -- The Horse Racing
- hdu1052 Tian Ji -- The Horse Racing
- [HDU1052]Tian Ji -- The Horse Racing[贪心]
- Tian Ji -- The Horse Racing(hdu1052)
- Hdu1052 Tian Ji -- The Horse Racing
- HDU1052 Tian Ji -- The Horse Racing(贪心)
- HDU1052-Tian Ji -- The Horse Racing-贪心
- Activity---数据传递
- 利用链栈的基本运算,通过输入将字符进栈,然后输出其出栈序列
- TCP/IP 通信示例
- 利用 Cordova 和 IBM Bluemix Mobile Data 服务构建一个混合移动应用程序
- malloc,calloc,realloc函数
- uva1344/ HDU1052:Tian Ji -- The Horse Racing
- SDNU1292.圣诞老人【动态规划】
- gvim安装中文文档
- 计算两个日期之间的天数
- 学术休假---字符类型个数
- 【Eclipse】eclipse上安装Easy Explorer/open explorer插件实现在Eclipse界面上直接打开文件
- iphone怎样和威威上车载蓝牙连接
- linux命令行选项的常见约定
- 负载均衡常用方式