中国有名的田忌赛马问题
贪心法即可解答,贪心时充分利用每一匹马的速度,每匹马尽量战胜对方速度最大的马,完全无法取胜的马区消耗对方的速度最快的马
#include<iostream>
using namespace std;
int n;
int a[1000],b[1000];
int main(){
while(cin>>n&&n){
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
cin>>b[i];
}
int t,ans=0;
for(int i=1;i<n;i++){ //对两组马的速度进行降序排序
for(int j=0;j<n-i;j++){
if(a[j]<a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
if(b[j]<b[j+1]){
t=b[j];
b[j]=b[j+1];
b[j+1]=t;
}
}
}
//表示田忌(1)和齐王(2)最差的马(r)与最好的马(l)下标
int l1=0,l2=0,r1=n-1,r2=n-1;
while(l1<=r1){
if(a[l1]>b[l2]){
ans+=200; //当前田忌最好的马比齐王最好的马更好
l1++; //赢
l2++;
}
else if(a[l1]<b[l2]){ //当前田忌最差的马不如齐王最差的马
ans-=200; //用最差的马队齐王最好的马 输
r1--;
l2++;
} else if(a[l1]==b[l2]&&a[r1]>b[r2]){ //当前最好的马相同,但最差的马比齐王最差的马好
ans+=200; //两者相比赢
r1--;
r2--;
}else if(a[l1]==b[l2]&&a[r1]<=b[r2]){ //当前田忌最坏的马不比齐王最差的马好
if(a[r1]<b[l2]){
ans-=200;
}
r1--;
l2++;
}
}
cout<<ans<<endl;
}
return 0;
}