zoukankan      html  css  js  c++  java
  • 田忌赛马(贪心

    给出田忌和齐王各马的速度,求最优得分;

    我的贪心策略(当然是错的 :

    1,用我方在 可以 战胜 或 比平 对方最慢的马 的马 中 最慢的马 去比 对方最慢的马

    2,直到我方最快的马也下场了,剩下的马默认全部战败

    这种策略明显是不对的——我方的快马的贪心策略应该是击败能力范围内对方最快的马(浪费最小),我方的慢马的贪心策略应该是(在不能发挥其他作用的情况下)去恶心掉对方最快的马(额外获益最大)

    结合这两种策略,总贪心策略应该是:

    1.用我方最快马比对方最快马,如能获胜,则胜之(不能有更好的结果了)

    2,如果1中不能战胜,则用我方最慢马抵之(一定会损失,让损失最小化)

    3.如果1中可以比平,若我方最慢马可以战胜对方的最慢马,则让他战胜而不抵(还能发挥更大作用,否则用其他马去比那匹慢马损失更大)直到找到最没用的慢马,把对方最快马给恶心掉

    需要指出的是,我方最慢马比对方最快马是可能平局的,要判断这种情况#include<cstdio>

    #include<algorithm>
    
    using namespace std;
    int a[1500],b[1500];
    int main(){
         int n;
         while(scanf("%d",&n)&&n){
             for(int i=0 ; i<n ; i++)scanf("%d",&a[i]);
             for(int i=0 ; i<n ; i++)scanf("%d",&b[i]);
             sort(a,a+n);
             sort(b,b+n);
             int ans=0,j1=0,j2=n-1,i1=0;      // j1 我方慢马 j2我方快马 i1敌方慢马 i敌方快马
             for(int i=n-1 ; i>=i1 ; i--){
                  //  printf("%d %d
    ",a[j2],b[i]);
                 if(a[j2]>b[i]){ans++; j2--;}        //策略1
                 else if(a[j2]<b[i]){ans--; j1++;}   //策略2
                 else {
                     if(a[j1]>b[i1]){ans++; i1++; j1++; i++;}  //策略 3-1
                     else {if(a[j1]<b[i])ans--; j1++;} // 策略 3-2 ,注意平局的判断
    } } printf(
    "%d ",ans*200); } return 0; }
  • 相关阅读:
    js函数在线手册
    Chrome 控制台新玩法-console显示图片以及为文字加样式
    HTML5 <details> 标签
    CSS 魔法系列:纯 CSS 绘制三角形(各种角度)
    CSS与HTML5响应式图片
    webkit内核浏览器的CSS写法
    Java学习笔记38(字符流)
    Java学习笔记37(字节流)
    Java学习笔记36(File类)
    Java学习笔记35(异常)
  • 原文地址:https://www.cnblogs.com/-ifrush/p/10532647.html
Copyright © 2011-2022 走看看