杭电1052

import java.util.Scanner;
import java.util.Arrays;

public class Main
{
       private int[] tian;
       private int[] king;
       private int n;
       private int m;     //田劲赢的钱        
       Main( int n )
       {
             this.tian = new int[n];
             this.king = new int[n];
             this.n = n;
             this.m = 0;
       }
       public void setT( int i,int a )
       {
              this.tian[i] = a;
       }
       public void setK( int i,int b )
       {
              this.king[i] = b;
       }

       

       public void sort()
       {
              Arrays.sort( this.tian );
              Arrays.sort( this.king );
       }

       public void setM()
       {
              int[] c = new int[n];
              for( int i=0;i<n;i++ )
              {
                   c[i] = 0;
              }
              int j=0;               //j指的是国王还没比的马里面最差的
              int k=this.n-1;        //k指的是国王还没比的马里面最好的
              int l=this.n-1;        //l指的是田忌目前好的马
              for( int i=0;i<=l; )
              {                  
                        if( tian[i]<king[j] )       //田忌的马比不上国王的马,就让那匹烂的马去对抗国王最好的马
                        {
                            m--;
                            k--;
                            i++;
                        }
                        else
                        {
                            if( tian[i]==king[j] )       //2匹马能力相同的情况下,这里比较蛋疼
                            {
                                if( tian[l]>king[k] )      //如果田忌最好的马的能力比国王的马好,就把田忌最好的马去和国王最好的马比赛,烂的马先别比赛
                                {
                                    m++;
                                    l--;
                                    k--;
                                }
                                else
                                {
                                    if( tian[i]<king[k] )     //如果田忌最好的马比不上国王最好的马,就让田忌最差的马去和国王最好的马比赛
                                    {
                                        m--;
                                        i++;
                                        k--;
                                    }
                                    else                    //这里是最极端的一种可能,在国王和田忌都剩下最后一匹马比赛,并且这两匹马打和的时候,这样做可以结束循环。
                                    {                       //这里跟网上的有点不同吧,是我个人的意见,或者我想错了,大家有什么见解,都可以提出来。
                                        i++;          
                                        k--;
                                    }
                                }
                            }
                            else
                            {
                                if( tian[i]>king[j] )          //田忌的马比国王的马,直接秒杀
                                {
                                    m++;
                                    j++;
                                    i++;
                                }
                            }
                        }                
              }

           
                   
       }
     
      public void prM()
      {
            System.out.println( this.m*200 );
      }
    
       public static void main(String[] args)
       {
              int n;
              Scanner cin = new Scanner(System.in);
              n = cin.nextInt();
              int a;
              while( n!=0 )
              {
                   Main m = new Main( n );
                   for( int i=0;i<n;i++ )
                   {
                        a = cin.nextInt();
                        m.setT( i,a );
                   }
                   for( int i=0;i<n;i++ )
                   {
                        a = cin.nextInt();
                        m.setK( i,a );
                   }
                   m.sort();
                   m.setM();
                   m.prM();
                   n = cin.nextInt(); 
              }
       }
}


先发下代码吧。

 始终要参考网上大神的代码,才能够。真够水的。

先说一下这道题目的思路吧。

这道题目,要做到:

1、如果田忌的某匹马相对于国王的马来说,是差的。那么它的最大价值化的方法是在拿它去和国王相对最好的马PK时,反正都是输嘛。

2、如果田忌的某匹马相对于国王的马来说,是好的。那么它的最大价值化的方法是在拿它去和国王的相对最好的马PK并且能胜利的时候,搞定最强的,给下面的小弟更多的机会。

3、如果田忌的某匹马相对于国王的马来说,是打和的。那么当田忌目前最好的马和国王目前最好的马PK,并且田忌的马取得胜利时,就让田忌最好的马去PK国王最好的马。如果田忌不能胜利的时候,就拿田忌打平的马去和国王最好的马PK,然后,就搞掉了最好的马。(有一点要注意,在这么搞的时候,如果到最后剩一匹马,并且打平的时候,要注意能够结束循环。  纯属个人意见,不喜勿喷。。。。)

这就是主要的解题思路和思想,貌似就是贪心算法吧。

我觉得我个人在寻找这种思路和归纳这种思路的能力很差,以后要好好提高啊。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值