Description
Input
Output
Sample Input
Sample Output
贪心的策略:
一、当田忌最快的马比国王最快的马快时,用田忌最快的马赢国王最快的马。
二、当田忌最快的马比国王最快的马慢时,用田忌最慢的马输给国王最快的马。
三、当田忌最快的马跟国王最快的马一样快时,分情况。
1.当田忌最慢的马比国王最慢的马快,用田忌最慢的马赢国王最慢的马
2.当田忌最慢的马比国王最慢的马慢或者相等时,用田忌最慢的马输给国王最快的马
代码如下:(把注释去掉,可以更好地理解全过程)
1 #include <stdio.h> 2 #include <algorithm> 3 using namespace std; 4 int q[1005],t[1005]; 5 bool cmp(int a,int b) 6 { 7 return a>b; 8 } 9 int main() 10 { 11 int n,tk,tm,qk,qm,ans; 12 while(scanf("%d",&n)==1&&n) 13 { 14 for(int i=0; i<n; i++) 15 scanf("%d",&t[i]); 16 for(int i=0; i<n; i++) 17 scanf("%d",&q[i]); 18 sort(q,q+n,cmp); 19 sort(t,t+n,cmp); 20 /*for(int i=0; i<n-1; i++) 21 printf("%d ",t[i]); 22 printf("%d\n",t[n-1]); 23 for(int i=0; i<n-1; i++) 24 printf("%d ",q[i]); 25 printf("%d\n",q[n-1]);*/ 26 tk=qk=0; 27 tm=qm=n-1; 28 ans=0; 29 for(int i=0; i<n; i++) 30 { 31 if(t[tk]>q[qk]) 32 { 33 //printf("t[%d]=%d q[%d]=%d\n",tk,t[tk],qk,q[qk]); 34 ans+=200; 35 tk++; 36 qk++; 37 //printf("%d\n",ans); 38 } 39 else if(t[tk]<q[qk]) 40 { 41 //printf("t[%d]=%d q[%d]=%d\n",tm,t[tm],qk,q[qk]); 42 ans-=200; 43 qk++; 44 tm--; 45 //printf("%d\n",ans); 46 } 47 else 48 { 49 int g,h; 50 for(g=tm,h=qm;g>=tk;g--,h--) 51 { 52 if(t[g]>q[h]) 53 { 54 // printf("t[%d]=%d q[%d]=%d\n",g,t[g],h,q[h]); 55 ans+=200; 56 tm--; 57 qm--; 58 // printf("%d\n",ans); 59 } 60 else 61 { 62 // printf("t[%d]=%d q[%d]=%d\n",g,t[g],h,q[h]); 63 if(t[g]<q[i]) 64 { 65 ans-=200; 66 tm--; 67 qk++; 68 // printf("%d\n",ans); 69 } 70 // printf("ans=%d\n",ans); 71 tm=--g; 72 qm=h; 73 break; 74 } 75 } 76 } 77 if(tk>tm) 78 break; 79 } 80 //printf("%d\n******************\n",ans); 81 printf("%d\n",ans); 82 } 83 return 0; 84 }
原文:http://www.cnblogs.com/huangguodong/p/4719961.html