码迷,mamicode.com
首页 > 其他好文 > 详细

LA 3266 Tian Ji -- The Horse Racing 田忌赛马 【贪心】

时间:2015-10-04 01:35:20      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:

  http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33702


贪心:

  1,如果田忌的最快马快于齐王的最快马,则两者比。
  (因为若是田忌的别的马很可能就赢不了了,所以两者比)
  2,如果田忌的最快马慢于齐王的最快马,则用田忌的最慢马和齐王的最快马比。
  (由于所有的马都赢不了齐王的最快马,所以用损失最小的,拿最慢的和他比)
  3,若相等,则比较田忌的最慢马和齐王的最慢马
    3.1,若田忌最慢马快于齐王最慢马,两者比。
    (田忌的最慢马既然能赢一个就赢呗,而且齐王的最慢马肯定也得有个和他比,所以选最小的比他快得。)
    3.2,其他,则拿田忌的最慢马和齐王的最快马比。
    (反正所有的马都比田忌的最慢马快了,所以这匹马必输,选贡献最大的,干掉齐王的最快马)


 

贪心策略2:

  一、如果a的最慢速度大于b的最慢,则直接a的最慢与b的最慢比赛,赢一场;
  二、如果a的最慢速度小于b的最慢,则用a的最慢浪费b的最快,输一场;
  三、如果a的最慢速度等于b的最慢,则:
    1.如果a的最快速度大于b的最快,则直接a的最快与b的最快进行比赛,赢一场;
    2.如果a的最快速度小于b的最快,则用a的最慢浪费b的最快,输一场;
    3.如果a的最快速度等于b的最快,即a与b的最慢与最快分别相等,则:
      a.如果a的最慢速度小于b的最快,则用a的最慢浪费b的最快,输一场;
      b.如果a的最慢速度等于b的最快,即a的最慢、a的最快、b的最慢、b的最快相等,说明剩余未比赛的马速度全部相等,直接结束比赛。

 


 

 

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn = 1005;
 5 int tian[maxn], king[maxn], n;
 6 
 7 int main(){
 8     while(~scanf("%d", &n)){
 9         if(!n) break;
10         for(int i = 0; i < n; ++i) scanf("%d", &tian[i]);
11         for(int i = 0; i < n; ++i) scanf("%d", &king[i]);
12         sort(tian, tian + n);
13         sort(king, king + n);
14         
15         int thead = 0, khead = 0;
16         int ttail = n-1, ktail = n-1;
17         int win = 0;
18 
19         while(n--){
20             if(tian[ttail] > king[ktail]){ //如果田忌的最快马快于齐王的最快马,则两者比。
21                 ttail--;
22                 ktail--;
23                 win++;
24             }
25             else if(tian[ttail] < king[ktail]){ //如果田忌的最快马慢于齐王的最快马,则用田忌的最慢马和齐王的最快马比。
26                 thead++;
27                 ktail--;
28                 win--;
29             }
30             else{ //若相等,则比较田忌的最慢马和齐王的最慢马
31                 if(tian[thead] > king[khead]){ //若田忌最慢马快于齐王最慢马,两者比。
32                     thead++;
33                     khead++;
34                     win++;
35                 }
36                 else{ //其他,则拿田忌的最慢马和齐王的最快马比。
37                     if(tian[thead] < king[ktail]) win--;
38                     thead++;
39                     ktail--;
40                 }
41             }
42         }
43         
44         printf("%d\n", win*200);
45     }
46     
47     return 0;
48 }

 

贪心策略2代码:

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<string.h>
 5 using namespace std;
 6 const int MAXN=1010;
 7 int a[MAXN],b[MAXN];
 8 int main(){
 9     int n;
10     while(scanf("%d",&n)==1&&n){
11         for(int i=0;i<n;i++)scanf("%d",&a[i]);
12         for(int i=0;i<n;i++)scanf("%d",&b[i]);
13         sort(a,a+n);
14         sort(b,b+n);
15         int al=0,ah=n-1;
16         int bl=0,bh=n-1;
17         int ans=0;
18         while(al<=ah&&bl<=bh){
19             if(a[al]>b[bl]){
20                 ans+=200;
21                 al++;bl++;
22             }
23             else if(a[al]<b[bl]){
24                 ans-=200;
25                 al++;bh--;
26             }
27             else{
28                 if(a[ah]>b[bh]){
29                     ans+=200;
30                     ah--;bh--;
31                 }
32                 else if(a[ah]<b[bh]){
33                     ans-=200;
34                     al++;bh--;
35                 }
36                 else{
37                     if(a[al]<b[bh]){
38                         ans-=200;
39                         al++;bh--;
40                     }
41                     else if(a[al]==b[bh]){//所有的都一样了
42                         break;
43                     }
44                 }
45             }
46         }
47         printf("%d\n", ans);
48     }
49     return 0;
50 }

 

LA 3266 Tian Ji -- The Horse Racing 田忌赛马 【贪心】

标签:

原文地址:http://www.cnblogs.com/miaowTracy/p/4854059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!