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

题目链接:

  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 }
时间: 2024-12-24 21:19:54

LA 3266 Tian Ji -- The Horse Racing 田忌赛马 【贪心】的相关文章

HDU 1052 Tian Ji -- The Horse Racing(贪心)(2004 Asia Regional Shanghai)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1052 Problem Description Here is a famous story in Chinese history. "That was about 2300 years ago. General Tian Ji was a high official in the country Qi. He likes to play horse racing with the king and

杭电 1052 Tian Ji -- The Horse Racing(贪心)

http://acm.hdu.edu.cn/showproblem.php?pid=1052 Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 18058    Accepted Submission(s): 5239 Problem Description Here is a fa

(hdu step 1.3.3)Tian Ji -- The Horse Racing(田忌赛马)

题目: Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4411 Accepted Submission(s): 1069   Problem Description Here is a famous story in Chinese history. "That was about 2

HDU 1052 Tian Ji -- The Horse Racing【贪心在动态规划中的运用】

算法分析: 这个问题很显然可以转化成一个二分图最佳匹配的问题.把田忌的马放左边,把齐王的马放右边.田忌的马A和齐王的B之间,如果田忌的马胜,则连一条权为200的边:如果平局,则连一条权为0的边:如果输,则连一条权为-200的边. 然而我们知道,二分图的最佳匹配算法的复杂度很高,无法满足N=2000的要求. 我们不妨用贪心思想来分析一下问题.因为田忌掌握有比赛的“主动权”,他总是根据齐王所出的马来分配自己的马,所以这里不妨认为齐王的出马顺序是按马的速度从高到低出的.由这样的假设,我们归纳出如下贪心

HDU Tian Ji -- The Horse Racing (贪心)

Tian Ji -- The Horse Racing Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 56   Accepted Submission(s) : 25 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description Here is a

[HDU1052]Tian Ji -- The Horse Racing(田忌赛马)

题目大意:田忌赛马问题,给出田忌和齐威王的马的数量$n$和每匹马的速度$v$,求田忌最多赢齐威王多少钱(赢一局得200,输一局扣200,平局不得不扣). 思路:贪心. 1.若田忌最慢的马可以战胜齐王最慢的马,那么就让它战胜那匹慢马,胜利场次加1.(田忌最慢马 > 齐王最慢马) 2.若田忌最慢的马不能战胜齐王最慢的马,那么它更加不能战胜其他的马,那就让它输给齐王最快的马,失败场次加1.(田忌最慢马 < 齐王最快马) 3.若田忌最慢的马与齐王最慢的马速度相等.此时,打平是错误的. 因为自己的快马很

POJ 2287 Tian Ji -- The Horse Racing(贪心)

题意:田忌和齐王有n匹马,进行n局比赛,每局比赛输者给胜者200,问田忌最多能得多少钱. 分析:如果田忌最下等的马比齐王最下等的马好,是没必要拿最下等的马和齐王最好的马比的.(最上等马同理) 因此,如果田忌最下等的马>齐王最下等的马或者田忌最上等的马>齐王最上等的马,直接得200,如果不满足该条件,那么才让田忌最下等的马与齐王最上等的马来比. #pragma comment(linker, "/STACK:102400000, 102400000") #include<

POJ2287 Tian Ji -- The Horse Racing【贪心】

题目链接: http://poj.org/problem?id=2287 题目大意: 田忌和大王赛马,两个人各有N匹马,每匹马都有一个速度,跑的快的胜,慢的就输.田忌每赢一 把得200,平了不得钱,输了输200.每次大王先出马,田忌再出马.问:田忌最多能得多少钱. 思路: 贪心思想.现对田忌和大王的马进行排序.田忌的马速度从小到大排列,大王的马速度从大到小排 列.为了尽可能的赢,田忌就要采取以下策略: 1)尽可能用自己速度低的马去赢得大王速度快的马. 2)剩下赢不了的马,尽可能用自己的马和大王的

hdoj 1052 Tian Ji -- The Horse Racing【田忌赛马】 【贪心】

思路:先按从小到大排序, 然后从最快的開始比(如果i, j 是最慢的一端, flag1, flag2是最快的一端 ),田的最快的大于king的 则比較,如果等于然后推断,有三种情况: 一:大于则比較,二等于在推断田的最慢的是不是比king的最快的慢,三小于则与king的最快的比較: Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe