zoukankan      html  css  js  c++  java
  • 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
    ", 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
    ", ans);
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    Power BI for Office 365(八)共享查询
    Power BI for Office 365(七) Power BI站点
    Power BI for Office 365(六)Power Map简介
    Power BI for Office 365(五)Power View第二部分
    Power BI for Office 365(四)Power View第一部分
    Power BI for Office 365(三)Power Pivot
    Power BI for Office 365(二)Power Query
    java 继承、重载、重写与多态
    Android 热修复方案Tinker(一) Application改造
    阿里最新热修复Sophix与QQ超级补丁和Tinker的实现与总结
  • 原文地址:https://www.cnblogs.com/miaowTracy/p/4854059.html
Copyright © 2011-2022 走看看