HDU1052 Tian Ji (经典贪心算法)
2016-02-10 20:13
274 查看
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=1052
田忌赛马问题,可以用贪心算法解决。
先把两个的队列从大到小排列。
原先错误的思路:
1、田忌的快马比齐王的快,直接比掉。
2、若快马没有快,就拿田忌最慢的和齐王最快的比较。
正确的思路:
1、田忌的快马比齐王的快,直接比掉。
2、若快马没有快,拿田忌最慢的和齐王最慢的比较,若快直接比掉。
3、若慢马比齐王慢,就拿田忌最慢的和齐王最快的比较。
虽然觉得觉得后面一个思路正确,但是我举不出返利反驳第一个。很多组测试数据都过了。。。
代码:
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; } }
相关文章推荐
- LCS—记录,回溯输出最长公共子序列
- NYOJ 题目772 数独
- CircularGauge等组件源代码的路径
- nyoj448
- linux常用命令详解
- bzoj1787 紧急集合 lca
- Java注解
- Bootstrap3学习笔记
- Codeforces Round #342 (Div. 2)-A. Guest From the Past(数学)
- cocos2d-x利用ClipingNode做游戏遮罩制作新手引导
- Spring注入Properties、List、Map、Set
- mvc多个文件上传和单个文件上传
- X - A == B ?(第二季水)
- poj 1163 The Triangle
- KVC(键值编码)详解
- CodeForces 119A Epic Game
- 书
- [笔记][Web]利用JS生成博文目录及CSS定制博客
- Java基础 数列排序
- ViewDragHelper 使用