HDU1052 Tian Ji (经典贪心算法)

来源:互联网 发布:淘宝的优化建议 编辑:程序博客网 时间:2024/05/29 16:28

题目:
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;    }}
0 0
原创粉丝点击