题解 P1650 【田忌赛马】

与古代田忌的应对方法差不多,现在我们任然可以用贪心的思路解答。

1.田忌的马甚至比齐王的马快,那么,直接将两人最快的马进行比赛,达到最优

2.田忌最快的马比齐王最快的马要慢,则与古代田忌的方案相同,用田忌最慢的马消耗掉齐王最快的马

3.齐王最快的马与田忌最快的马速度相当,又可以分成2种情况 程序:

#include <bits/stdc++.h>
using namespace std;
long n,money,x1,x2,y11,y2;
int a[10001],b[10001];
int main(){
    cin>>n;
    for(int i=0;i<n;i++)//田忌的马 
        cin>>a[i];
    for(int i=0;i<n;i++)//齐王的马 
        cin>>b[i];
    sort(a,a+n);//先给各自的马排序
    sort(b,b+n);
    x1=x2=0;//先给各个数值初始化 
    y11=y2=n-1;
    while(x1<=y11){
        if(a[y11]>b[y2]){//如果田忌的最快的马比齐王最快的马还要快,自然相比 
            money+=200;//增加钱 
            y11--;//两边的的马的数量都减少一个 
            y2--;
        }
        else if(a[y11]<b[y2]){//如果田忌的最快的马比齐王最快的马要慢,则用田忌最慢的马来消耗掉齐王最快的马 
            money-=200;//钱要减少 
            x1++;
            y2--;
        }
        else{//如果田忌最快的马与齐王最快的马速度相当
            if(a[x1]>b[x2]){//如果田忌最慢的马比齐王最慢的马要快,则田忌会用他最慢的马与齐王最慢的马比赛 
                money+=200;//钱要增加 
                x1++;
                x2++;
            }
            else{//否则,用田忌最慢的马消耗掉齐王最快的马 
                if(a[x1]<b[y2])
                    money-=200;
                x1++;
                y2--;
            }
        }
    }
    cout<<money;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值