HDU 1052 Tian Ji -- The Horse Racing(贪心)
2014-07-27 00:46
316 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1052
题目大意:题目意思很好懂,田忌赛马都懂哈,先给你田忌的n匹马,给你齐王的n匹马。问你最多能得多少分,胜一场200分负一场-200分,平一场不得分。
解题思路:自己开始贪心的策略是先用田忌的快马与齐王的快马相比,>则胜一场,<则用田忌的慢马与齐王的快马相比。=的话这里没处理好,所以就WA了。看了下大牛的博客。讲下思路。
思路是每次先让慢马相比,如果>胜一场,<则拉下水,=要看自己的快马能不能赢,不能赢,则拉下水,能赢则赢一场。
下面文字来源于nyist_xiaod
1.若田忌最慢的马可以战胜齐王最慢的马,那么就让它战胜那匹慢马,胜利场次加1。(田忌最慢马 > 齐王最慢马)
2.若田忌最慢的马不能战胜齐王最慢的马,那么它更加不能战胜其他的马,那就让它输,而且输给齐王最快马,失败场次加1。(田忌最慢马 < 齐王最快马)
3.若田忌最慢的马与齐王最慢的马速度相等。此时,不能简单地认为与它打成平手就是最好情况,相反,打平是下下策,为什么呢?
因为自己后面的队友很有可能战胜此时对方的这匹慢马,所以就算自己输一场,队友也能帮忙赢回一场,而胜一场,输一场的收益和打平一场的收益是一样的,而且自己输的时候可以拉对方最快的马下水,给己方最快的马创造更大的胜利机会(因为它失去了一个强劲的对手),也就是说己方最快的马很可能因为自己的牺牲再胜利一场,从这个角度看,还是自己故意输掉比较好。
但是,还有一点需要注意,当自己放水前,如果己方最快的马原本就比对方最快的马快,然后还输给对方最快的马,那么己方最快的马的才华就浪费了,为什么?
很简单,它原本就能赢,需要你放水么?- -!换句话说,这种情况下,自己的牺牲没有一点价值。
所以,在放水时,一定要保证己方最快马不快于对方最快马。满足此条件后,让己方最慢马与对方最快马去比赛(有可能平局),这样,田忌的马就得到了充分的利用。
转自于:http://www.2cto.com/kf/201308/239704.html
题目大意:题目意思很好懂,田忌赛马都懂哈,先给你田忌的n匹马,给你齐王的n匹马。问你最多能得多少分,胜一场200分负一场-200分,平一场不得分。
解题思路:自己开始贪心的策略是先用田忌的快马与齐王的快马相比,>则胜一场,<则用田忌的慢马与齐王的快马相比。=的话这里没处理好,所以就WA了。看了下大牛的博客。讲下思路。
思路是每次先让慢马相比,如果>胜一场,<则拉下水,=要看自己的快马能不能赢,不能赢,则拉下水,能赢则赢一场。
下面文字来源于nyist_xiaod
1.若田忌最慢的马可以战胜齐王最慢的马,那么就让它战胜那匹慢马,胜利场次加1。(田忌最慢马 > 齐王最慢马)
2.若田忌最慢的马不能战胜齐王最慢的马,那么它更加不能战胜其他的马,那就让它输,而且输给齐王最快马,失败场次加1。(田忌最慢马 < 齐王最快马)
3.若田忌最慢的马与齐王最慢的马速度相等。此时,不能简单地认为与它打成平手就是最好情况,相反,打平是下下策,为什么呢?
因为自己后面的队友很有可能战胜此时对方的这匹慢马,所以就算自己输一场,队友也能帮忙赢回一场,而胜一场,输一场的收益和打平一场的收益是一样的,而且自己输的时候可以拉对方最快的马下水,给己方最快的马创造更大的胜利机会(因为它失去了一个强劲的对手),也就是说己方最快的马很可能因为自己的牺牲再胜利一场,从这个角度看,还是自己故意输掉比较好。
但是,还有一点需要注意,当自己放水前,如果己方最快的马原本就比对方最快的马快,然后还输给对方最快的马,那么己方最快的马的才华就浪费了,为什么?
很简单,它原本就能赢,需要你放水么?- -!换句话说,这种情况下,自己的牺牲没有一点价值。
所以,在放水时,一定要保证己方最快马不快于对方最快马。满足此条件后,让己方最慢马与对方最快马去比赛(有可能平局),这样,田忌的马就得到了充分的利用。
#include<iostream> #include<cstring> #include<algorithm> #include<cstdio> using namespace std; int a[1005]; int b[1005]; int cmp(int a,int b) { if(a>b) return 1; return 0; } int main() { int n,i,j,sum,len1,len2; while(scanf("%d",&n)&&n) { for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n,cmp); //田忌的马从快到慢排序 for(i=0;i<n;i++) scanf("%d",&b[i]); sort(b,b+n,cmp); //齐王的马从快到慢排序 i=0,j=0; len1=len2=n-1; //最慢的马的位置 sum=0; while(i<=len1&&j<=len2) { if(a[len1]>b[len2]) //田忌慢马>齐王慢马 { sum++; //先胜一场 len1--,len2--; } else if(a[len1]<b[len2]) { sum--; //拿最慢的马与齐王快马赛 j++; len1--; } else { if(i<len1) //除去最快的马还有别的马 { if(a[i]<=b[j]) //田忌的快马赢不了 { if(a[len1]<b[j]) sum--; len1--,j++; } else { sum++; //快马赢 i++; j++; } } else { len1--,len2--; //平局 } } } printf("%d\n",sum*200); } return 0; } /* 4 70 65 50 20 70 65 55 20 4 70 60 50 20 70 65 55 20 4 70 55 50 20 70 65 55 20 */
转自于:http://www.2cto.com/kf/201308/239704.html
相关文章推荐
- hdu_1052_Tian Ji -- The Horse Racing_贪心
- HDU-1052-Tian Ji -- The Horse Racing(C++ && 简单贪心)
- HDU 1052 Tian Ji -- The Horse Racing(贪心)
- HDU 1052 Tian Ji -- The Horse Racing (贪心)
- HDU 1052 Tian Ji -- The Horse Racing(贪心)
- 杭电hdu 1052 Tian Ji -- The Horse Racing 贪心
- HDU - 1052 Tian Ji -- The Horse Racing(简单贪心)
- HDU 1052 Tian Ji -- The Horse Racing(贪心)
- hdu 1052 Tian Ji -- The Horse Racing(贪心)
- HDU 1052 Tian Ji -- The Horse Racing(贪心)
- HDU 1052 - Tian Ji -- The Horse Racing(贪心)
- 【贪心专题】HDU 1052 Tian Ji -- The Horse Racing (田忌赛马)
- HDU 1052 Tian Ji -- The Horse Racing 贪心
- hdu 1052 Tian Ji -- The Horse Racing(贪心)
- ZOJ 2397(HDU 1052) Tian Ji -- The Horse Racing 贪心
- HDU 1052 Tian Ji -- The Horse Racing(贪心)
- POJ 2287 && HDU 1052 Tian Ji -- The Horse Racing(贪心)
- hdu 1052 Tian Ji -- The Horse Racing(贪心策略)
- ny 364 田忌赛马 && hdu 1052 Tian Ji -- The Horse Racing【贪心】
- hdu 1052 Tian Ji -- The Horse Racing (贪心+dp)