前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >POJ 2287 田忌赛马(贪心)

POJ 2287 田忌赛马(贪心)

作者头像
Michael阿明
发布2021-02-20 10:47:56
发布2021-02-20 10:47:56
53300
代码可运行
举报
运行总次数:0
代码可运行

1. 题目

1.1 题目链接

http://poj.org/problem?id=2287

1.2 题目大意

双方各有n匹战斗力各异的马,分别派出来PK,假设对方先出牌,我方后出,求我方最多能胜几场

1.3 解题思路

  • 对方出来战斗力k的马
  • 我方派出战斗力比k大的且最弱的马,赢,保存实力更高的马
  • 若均无法战胜对方,派出最弱的马,让你赢个最弱的,保存实力

2. Accepted 代码

代码语言:javascript
代码运行次数:0
复制
/**
 * @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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/07/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
    • 1.1 题目链接
    • 1.2 题目大意
    • 1.3 解题思路
  • 2. Accepted 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档