标签:贪心
3 92 83 71 95 87 74 2 20 20 20 20 2 20 19 22 18 0
200 0 0
Statistic | Submit | Discuss | Note
贪心
如果田忌最快的马比国王最快的马要快,那么直接比
如果田忌最快的马比国王最快的马要慢,那么用田忌最慢的马去和国王最快的马比,(反正一定要输一场,而田忌最快的马可能还能在其他比赛中胜出,所以用田忌最慢的去比至少不会吃亏)
如果田忌最快的马和国王最快的马一样快,那么要分情况
A.如果田忌最慢的马的速度小于国王最慢的马,那么就用田忌最慢的马去和国王现在最快的马比(因为田忌最慢的马现在一场也赢不了,所以还不如来抵抗国王最快的,留下自己最快的可能还能在其他比赛中胜出)
B.如果田忌最慢的马速度和国王最慢的马的速度一样,那么此时,我们还是应该用这匹最慢的马去和国王最快的马比(如果是快对快,慢对慢这样比,虽然不会亏,但是田忌最快的马已经用掉,不可能在去盈利,而如果是用田忌最慢的马去和国王最快的马比,虽然这里可能吃亏了,但是存在一种情况,即使田忌最快的马在面对除国王最慢以外的其他马时,无法盈利,但是此时田忌最快的马面对国王最慢的马时,至少不会吃亏,所以2种策略对比,后者更可取,因为除上述情况外, 田忌还是可能获利的)
C. 如果田忌最慢的马的速度大于国王最慢的马,那么就应该用田忌最慢的马去和国王最慢的马比(这里至少可以获利,去除所有C的情况,我们把情况转化为A,B,即使采取A,B策略亏本了(面对国王最快的马然后输掉比赛),C策略下的盈利还是大于等于亏本的)
#include <map> #include <set> #include <list> #include <queue> #include <stack> #include <vector> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 1010; int tianji[N], king[N]; int main() { int n; while (~scanf("%d", &n), n) { for (int i = 0; i < n; ++i) { scanf("%d", &tianji[i]); } for (int i = 0; i < n; ++i) { scanf("%d", &king[i]); } sort(tianji, tianji + n); sort(king, king + n); int king_max = n - 1, tianji_min = 0, king_min = 0; int ans = 0, i = n - 1; while (i >= tianji_min && king_max >= king_min) { if (tianji[i] > king[king_max]) { ans += 200; king_max--; i--; } else if (tianji[i] < king[king_max]) { king_max--; tianji_min++; ans -= 200; } else { if (tianji[tianji_min] < king[king_min]) { king_max--; tianji_min++; ans -= 200; } else { for (int j = tianji_min; j < n; ++j) { if (tianji[j] > king[king_min]) { ans += 200; king_min++; } else { tianji_min = j; if (tianji[tianji_min] < king[king_max]) { ans -= 200; } king_max--; tianji_min++; break; } } } } } printf("%d\n", ans); } return 0; }
hdu1052——Tian Ji -- The Horse Racing
标签:贪心
原文地址:http://blog.csdn.net/guard_mine/article/details/41577667