贪心:
贪心策略: 1,如果田忌的最快马快于齐王的最快马,则两者比。 (因为若是田忌的别的马很可能就赢不了了,所以两者比) 2,如果田忌的最快马慢于齐王的最快马,则用田忌的最慢马和齐王的最快马比。 (由于所有的马都赢不了齐王的最快马,所以用损失最小的,拿最慢的和他比) 3,若相等,则比较田忌的最慢马和齐王的最慢马 3.1,若田忌最慢马快于齐王最慢马,两者比。 (田忌的最慢马既然能赢一个就赢呗,而且齐王的最慢马肯定也得有个和他比,所以选最小的比他快得。) 3.2,其他,则拿田忌的最慢马和齐王的最快马比。 (反正所有的马都比田忌的最慢马快了,所以这匹马必输,选贡献最大的,干掉齐王的最快马)(转载)
1 #include<stdio.h> 2 #include<stdlib.h> 3 int tian[1005],king[1005]; 4 5 int cmp(const void *a,const void *b) 6 { 7 return *(int *)a-*(int *)b; 8 } 9 10 int main() 11 { 12 int n; 13 while(scanf("%d",&n)&&n) 14 { 15 for(int i=0;i<n;i++) 16 scanf("%d",&tian[i]); 17 for(int i=0;i<n;i++) 18 scanf("%d",&king[i]); 19 qsort(tian,n,sizeof(int),cmp); 20 qsort(king,n,sizeof(int),cmp); 21 22 int min1=0,min2=0; 23 int max1=n-1,max2=n-1; 24 int sum=0; 25 while(max1>=min1) 26 { 27 if (tian[max1] > king[max2]) 28 { 29 sum += 200; 30 max1 --; 31 max2 --; 32 } 33 else if (tian[max1] < king[max2]) 34 { 35 sum -= 200; 36 min1 ++; 37 max2 --; 38 } 39 else 40 { 41 if (tian[min1] > king[min2]) 42 { 43 sum += 200; 44 min1 ++; 45 min2 ++; 46 } 47 else 48 { 49 if (tian[min1] < king[max2]) 50 { 51 sum -= 200; 52 } 53 min1 ++; 54 max2 --; 55 } 56 } 57 } 58 printf("%d\n",sum); 59 } 60 return 0; 61 }