POJ2287 Tian Ji -- The Horse Racing

  原题传送:http://poj.org/problem?id=2287

 

贪心算法:

  1. 田忌要尽可能用最慢的马去赢齐王最快的马。

  2. 能赢就赢。

 

  一开始我不是这么想的,我是用田忌最快的马和齐王最快的马比较,如果田忌慢,那么换田忌最慢的马和谐掉齐王最快的马,那么田忌剩下的马赢的次数就能多点。但是这种想法是错的,这样过不了下面这组测试数据:

3
5 5 3
5 4 2
答案:400

View Code
 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <string.h>
 4 #define MAXN 1005
 5 
 6 int a[MAXN], b[MAXN];
 7 
 8 bool cmp(int x, int y){return x > y;}
 9 
10 int main()
11 {
12     int i, n, sum, k, al, ar, bl, br;
13     while(scanf("%d", &n), n)
14     {
15         for(i = 0; i < n; i ++)
16             scanf("%d", &a[i]);
17         for(i = 0; i < n; i ++)
18             scanf("%d", &b[i]);
19         std::sort(a, a + n, cmp);
20         std::sort(b, b + n, cmp);
21         k = sum = 0;
22         al = bl = 0, ar = br = n - 1;
23         while(al <= ar)
24         {
25             if(a[ar] > b[br])
26             {
27                 sum ++;
28                 ar --, br --;
29             }
30             else if(a[al] > b[bl])
31             {
32                 sum ++;
33                 al ++, bl ++;
34             }
35             else if(a[al] <= b[bl])
36             {
37                 if(a[ar] < b[bl])
38                     k ++;
39                 ar --, bl ++;
40             }
41         }
42         printf("%d\n", 200 * (sum - k));
43     }
44     return 0;
45 }

 

  后来想想,怎么好像是动态规划题啊。

 

posted @ 2012-09-20 23:32  芒果布丁  阅读(210)  评论(0编辑  收藏  举报