题目描述:
中国古代的历史故事“田忌赛马”是为大家所熟知的。话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱。现在每匹马的速度值是固定而且已知的,而齐王出马也不管田忌的出马顺序。请问田忌该如何安排自己的马去对抗齐王的马,才能赢取最多的钱?
输入格式:
第一行为一个正整数n (n < = 2000) ,表示双方马的数量。 第二行有N个整数表示田忌的马的速度。 第三行的N个整数为齐王的马的速度。马的速度均小于100000且大于0.
输出格式:
仅有一行,为田忌赛马可能赢得的最多的钱,结果有可能为负。
样例输入:
3 92 83 71 95 87 74
样例输出:
200
时间限制: 1000ms
空间限制: 256MB
代码如下:
#include<cstdio>
#include <algorithm>
using namespace std;
long long h1,h2,t1,t2,n,s=0;
long long a[2001]={},b[2001]={};
int cmp(int a,int b){
return a>b;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++){
scanf("%d",&b[i]);
}
sort(a+1,a+n+1,cmp);
sort(b+1,b+n+1,cmp);
h1=h2=1;
t1=t2=n;
while(h1<=t1){
if(a[h1]>b[h2]){
s+=200;
h1++;
h2++;
}else{
if(a[h1]<b[h2]){
s-=200;
t1--;
h2++;
}else{
if(a[t1]>b[t2]){
s+=200;
t1--;
t2--;
}else{
if(a[t1]<b[h2]){
s-=200;
t1--;
h2++;
}
}
}
}
}
printf("%d",s);
}