标签:贪心

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