文章目录
- 1. 题目
- 1.1 题目链接
- 1.2 题目大意
- 1.3 解题思路
- 2. Accepted 代码
1. 题目
1.1 题目链接
http://poj.org/problem?id=2287
1.2 题目大意
双方各有n匹战斗力各异的马,分别派出来PK,假设对方先出牌,我方后出,求我方最多能胜几场
1.3 解题思路
- 对方出来战斗力k的马
- 我方派出战斗力比k大的且最弱的马,赢,保存实力更高的马
- 若均无法战胜对方,派出最弱的马,让你赢个最弱的,保存实力
2. Accepted 代码
/*** @description: poj2287田忌赛马(贪心)* @author: michael ming* @date: 2019/7/2 23:55* @modified by: */
#include <iostream>
#include <algorithm>
using namespace std;
bool comp(int a, int b)
{return a > b;
}
int main()
{int i, j, iend, jend, n, money;int tianji[1001], king[1001];while(cin >> n && n != 0){for(i = 0; i < n; ++i)cin >> tianji[i];for(j = 0; j < n; ++j)cin >> king[j];sort(tianji, tianji+n, comp);//从大到小排序sort(king, king+n, comp);//从大到小排序i = j = 0;iend = jend = n-1;money = 0;while(i <= iend){if(tianji[i] > king[j])//我方能打赢所有的,那么我就打掉一个最厉害的{money += 200;i++,j++;}else if(tianji[i] < king[j])//我方最大的都比别人小,让最弱的出战{money -= 200;iend--,j++;}else//两边最厉害的一样{if(tianji[iend] > king[jend])//最弱的马都能打败你的最弱马,那就用最小实力的{money += 200;iend--,jend--;}else if(tianji[iend] < king[jend])//我最弱的马没有胜算,让给你最强的马吃掉{money -= 200;iend--,j++;}else//两边最厉害的,和最弱的都一样,{if(tianji[iend] < king[j])money -= 200;//我最弱的给你最强的吃掉iend--,j++;//如果tianji[iend] == king[j]//说明剩余两边的马全部相等,打平,金钱不变,下标挪一下}}}cout << money << endl;}return 0;
}