您的位置:首页 > 其它

HDU 1052田忌赛马 贪心+动态数组

2016-05-15 19:07 253 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1052

就是田忌赛马,贪心策略为:

田忌的最快与齐王最快比,田忌快则比掉,赢下;

田忌慢则用田忌最慢的比齐王最快,输掉;

快马相等的话,用田忌的最慢与齐王最慢比,田忌快则赢下,田忌慢则比齐王最快输掉;

最快与最慢都相等,则用田忌最慢比掉齐王最快,输掉;

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn = 1005 ;
vector<int> h1;
vector<int> h2;
int main(){
int n ;
//freopen("in.txt","r",stdin);
while(~scanf("%d",&n),n){
int a;
h1.clear();
h2.clear();
for(int i=0;i<n;i++){
scanf("%d",&a);
h1.push_back(a);
}
for(int i=0;i<n;i++){
scanf("%d",&a);
h2.push_back(a);
}
sort(h1.begin(),h1.end());
sort(h2.begin(),h2.end());

int sum = 0 ;
for(int i=0;i<n;i++){
// for(int i=0;i<h1.size();i++)printf("%d %d\n",h1[i],h2[i]);
// printf("sum = %d\n",sum);
if(h1.back()>h2.back()){
//printf("why\n");
sum+=200;
h1.erase(h1.end()-1);
h2.erase(h2.end()-1);
}else if(h1.back()<h2.back()){
sum-=200;
h1.erase(h1.begin());
h2.erase(h2.end()-1);
}else{
if(h1.front()>h2.front()){
sum+=200;
h1.erase(h1.begin());
h2.erase(h2.begin());
}else if(h1.front()<h2.front()){
sum-=200;
h1.erase(h1.begin());
h2.erase(h2.end()-1);
}else{
if(h1.front()==h2.back()){
h1.erase(h1.begin());
h2.erase(h2.end()-1);
}else{
sum-=200;
h1.erase(h1.begin());
h2.erase(h2.end()-1);
}
}
}
}
printf("%d\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: