1. 程式人生 > >題解 P1650 【田忌賽馬】

題解 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; }