您的位置:首页 > 其它

HDU1052 Tian Ji (经典贪心算法)

2016-02-10 20:13 274 查看
题目:

http://acm.hdu.edu.cn/showproblem.php?pid=1052

田忌赛马问题,可以用贪心算法解决。

先把两个的队列从大到小排列。

原先错误的思路:

1、田忌的快马比齐王的快,直接比掉。

2、若快马没有快,就拿田忌最慢的和齐王最快的比较。

正确的思路:

1、田忌的快马比齐王的快,直接比掉。

2、若快马没有快,拿田忌最慢的和齐王最慢的比较,若快直接比掉。

3、若慢马比齐王慢,就拿田忌最慢的和齐王最快的比较。

虽然觉得觉得后面一个思路正确,但是我举不出返利反驳第一个。很多组测试数据都过了。。。

代码:

#include<iostream>
using namespace std;
int n,a[1005],b[1005];
int cmp(const void *a,const void *b){
return (*(int *)b)-(*(int *)a);
}
int main(){
int i;
while (cin>>n&&n)
{
for (i = 0; i < n; i++){
cin >> a[i];
}
for (i = 0; i < n; i++){
cin >> b[i];
}
qsort(a, n, sizeof(int), cmp);
qsort(b, n, sizeof(int), cmp);
i = 0;
int mon = 0,j=0,i2=n-1,j2=n-1;
while (i<=i2&&j<=j2)
{
if (a[i]>b[j]){
i++;
j++;
mon++;
}
else if (a[i]<b[j])
{
j++;
i2--;
mon--;
}
else
{
if (a[i2]>b[j2]){
i2--;
j2--;
mon++;
}
else if (a[i2]==b[j])
{
j++;
i2--;
}
else{
j++;
i2--;
mon--;
}
}
}
cout << mon*200 << endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: