典型的贪心算法~ (田忌赛马 )

 1. 田忌赛马

 典型的贪心算法~~自己木有考虑到贪心的第二步导致wa了好多次

算法分析 

Problem Description:

给出2N组数据,分别表示田忌和齐威王的N匹马的速度,没进行一场比赛(每组数据共N场场赛),若能分出胜负,则输的一方要给赢的一方200Y¥(银元),求田忌以怎样的策略才能赚取最多的老婆本。

Solution:这题有多种解体思路,DP,二分图最大匹配算法等,这里给出的是比较容易理解的贪心算法,具体思路如下:

先将田忌跟齐王的马的速度数组进行一次冒泡排序

1、如果田忌最快的马比齐王最快的马快,则比之

2、如果田忌最快的马比齐王最快的马慢,则用田最慢的马跟齐最快的马比  //这是贪心的第一步

3、如果田忌最快的马的速度与齐威王最快的马速度相等

3.1、如果田忌最慢的比齐威王最慢的快,则比之                         //这是贪心的第二步

3.2、如果田忌最慢的比齐威王最慢的慢,田忌慢VS齐王快

3.3、田忌最慢的与齐威王最慢的相等,田忌慢VS齐王快

注意这两种 数据

3

1 2 3

92 83 71 tian 第一步 tian1对king1 转到2 贪心的第一次,

95 92 74 king 第二步tian1对king2 转到3.1 (贪心的第二次 保留tian的快马 )

第三步 只剩下一种选择了~~3 92 83 70 92 91 60

*********代码

#include   
#include   
#include   
using namespace std;  
int a[3000],b[3000];  
int cmp(int a,int b)  
{  
  return a>b;      
}  
int main()  
{  
   int i,n,j,sum,k,f,ji;  
   while( scanf("%d",&n) && n!=0 )  
   {  
      for(i=0;ia[i]) {   sum-=200;j++;k--;ji++; continue;}  //如果king的比tian的快马快 用tian的慢马对king的快马    
          if(b[j]==a[i]){                                       //如果相等    
                            if(b[f]a[k]){sum-=200;k--;j++;ji++;}  
                            else {k--;j++;ji++;}  
                            continue;  
                        }  
          if(b[j] 
 

你可能感兴趣的:(贪心算法,算法)