【贪心】 POJ 2287 - Tian Ji -- The Horse Racing

题意

田忌与王赛马,每人各有N匹马,王的马出场顺序固定,田忌赢一场为200, 平局为0, 输为-200,田忌选择一种方式,使赢的钱最多或输的钱最少

思路

贪心:

1.如果田忌最快的马比王最快的马快,用田忌最快的马和王最快的马比

2.如果田忌最快的马比王最快的马慢,用田忌最慢的马和王最快的马比

3.如果田忌最快的马与王最快的马相等

{

  1.如果田忌最慢的马比王最慢的马快,用田忌最慢的马与王最慢的马比

  2.如果田忌最慢的马比王最慢的马慢,用田忌最慢的马与王最快的马比

  3.如果田忌最慢的马与王最慢的马相等,用田忌最慢的马与王最快的马比

}

总结

第一次写贪心,看的别人的思路 ,这个归类于什么思路呢?等晚上看完贪心再说好了,还不太清楚

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 using namespace std;
 6 const int maxn = 1005;
 7 int n;
 8 int tian[maxn], king[maxn];
 9 int main()
10 {
11   //  freopen("in.txt", "r", stdin);
12     while(scanf("%d", &n) && n) {
13         memset(tian, 0, sizeof tian);
14         memset(king, 0, sizeof king);
15         for(int i = 0; i < n; i++) {
16             scanf("%d", &tian[i]);
17         }
18         for(int i = 0; i < n; i++) {
19             scanf("%d", &king[i]);
20         }
21         sort(tian, tian + n);
22         sort(king, king + n);
23         int ans = 0, cnt = 0;
24         int mat = n-1, mak = n-1, mit = 0, mik = 0;
25         while(cnt < n) {
26             if(tian[mat] > king[mak]) {
27                 ans += 200;
28                 mat--;
29                 mak--;
30             }
31             else if(tian[mat] < king[mak]) {
32                 ans -= 200;
33                 mit++;
34                 mak--;
35             }
36             else {
37                 if(tian[mit] > king[mik]) {
38                     ans += 200;
39                     mit++;
40                     mik++;
41                 }
42                 else {
43                     if(tian[mit] < king[mak]) {
44                         ans -= 200;
45                     }
46                     mit++;
47                     mak--;
48                 }
49             }
50             cnt++;
51         }
52         printf("%d\n", ans);
53     }
54     return 0 ;
55 }

 

posted @ 2016-11-22 17:26  kikii233  阅读(169)  评论(0)    收藏  举报