题目链接:https://vjudge.net/problem/HDU-1052
转载于>>>
题目大意:
田忌赛马的故事众所都知,田忌与国王赛马,赢一场赚200,输一场亏200,平局没有影响。问田忌最大能赚多少。
输入:
输入数据多达50个测试案例。每一个数据都是由一个正整数n(1000个)开始,这是马的数目。第二行每一个整数是田忌的马的速度。第三行的每一个整数是国王的马的速度。n为0则输入结束。
输出:
对于每一个输入的情况,输出一行包含一个单一的数字,这是田忌将获得的最大的钱数。
说实话,对这道题还不是很懂,为什么田忌最快的马比齐王最快马要快的时候,它们两要相比
比如: 100 80 75 70 65
98 81 76 72 67
这组数据,很明显不符合啊,算了,这道题先记录着吧,以后再看看。
况且为什么这道题是道贪心题啊!
#include<iostream> using namespace std; bool cmop(int a,int b) { return a>b; } int main() { int i,j,h,n,king[1005],tianji[1005],kquick,kslow,tquick,tslow,total; while(cin>>n,n) { total=0; for(i=0;i<n;i++) cin>>tianji[i]; for(i=0;i<n;i++) cin>>king[i]; sort(king,king+n,cmop); sort(tianji,tianji+n,cmop); //kquick=king's the most quick ,kslow =king's the most slow kquick=tquick=0; kslow=tslow=n-1; for(i=0;i<n;i++)//i is tianji the most quick { //当田忌最快的马比国王最快的马快时 用田忌最快的马跟国王最快的马比 if(tianji[tquick]>king[kquick]) { total+=200; kquick++; tquick++; } //当田忌最快的马比国王最快的马慢时 用田忌最慢的马跟国王最快的马比 else if(tianji[tquick]<king[kquick]) { total-=200; tslow--; kquick++; } else//j is tianji { for(j=tslow,h=kslow;j>=tquick;j--,h--) { if(tianji[j]>king[h])//当田忌最慢的马比国王最慢的马快时 用田忌最慢的马跟国王最慢的马比 { total+=200; tslow--; kslow--; } else // 用田忌最慢的马跟国王最快的马比 { if(tianji[j]<king[i]) { total-=200; tslow--; kquick++; } tslow=--j; kslow=h; break; } } } if(tquick>tslow) break; } cout<<total<<endl; } return 0;
2018-04-24