贪心算法之田忌赛马(超详细)

2023-11-09

简述

手把手教会贪心算法之田忌赛马,超详细。

题目

田忌赛马
田忌和齐王赛马,两人各出n匹马,赢一场比赛得200两银子,输了赔200银子,平局不赔不赚.已知两人每匹马的速度,问田忌最多能赢多少银子.
多组测试数据,
每组数据的第一行是一个整数n。 (1<=n<=1000)
第二行包括n个整数既田忌每匹马的速度.
第三行包括n个整数既齐王每匹马的速度.
每匹马的速度不超过1000.
对于每组数据输出一行有一个整数代表田忌最多能赢多少银子
Sample Input
3
92 83 71
95 87 74
2
20 20
20 20
2
20 19
22 18
Sample Output
200
0
0

思路

其实就是一个简单的贪心算法,用最少的精力去赚得最多的财富。田忌要赢的最多,那么就要知道要用最坏的马去消耗齐王最好的马,接下来要考虑几件事情:
1,先要把马排一下序,从而使田忌更容易地用更慢的马去换掉齐王更快的马田忌最快的马。

 int cmp(int a,int b){
    return a>b;
 }
 int a[10000],b[10000];
 sort(a+1,a+n+1,cmp);//从快到慢
 sort(b+1,b+n+1,cmp);

2,接下来考虑策略。对于每一次比拼的考虑,如果田忌当前最快的马比齐王当前最快的马还快,那就要胜利次数加一,并且移除这两匹马(用过了不能再用)

if(a[fa]>b[fb]){
        cnt++;
        fa++;
        fb++;
    }

3,如果2不成立,那么就要考虑两人当前最慢的马的比拼,原理同上。

else if(a[la]>b[lb]){
        cnt++;
        la--;
        lb--;
    }

4,如果还是比不过,那就用田忌当前最差的马和齐王当前最好的马比拼(这样最值得),接下来有两种结果:①田忌输了(田忌当前最差的马比齐王当前最好的马要慢),那么胜利次数减一,移除这两匹马②万一平局(不可能胜利,因为前面田忌最好的马赢不过齐王),平局是什么情况呢?就是在上面三个判断都为否的情况下:对于平局(田忌最慢的马和齐王最快的马一样),以及2的判断(田忌最慢的马赢不过齐王最慢的马)。这两个条件可以知道,只有一种情况,齐王最快的马等于最慢的马(也就是只有一匹马了),加之平局,因此什么都不用操作。

else{
        if(a[la]<b[fb]){
            cnt--;
            la--;
            fb++;
        }
    }

实现

然后再把读入,读出,清零,最快最慢的马的赋值写上就是完整的代码了。

#include<bits/stdc++.h>
using namespace std;
int cmp(int a,int b){
    return a>b;
}//sort排序
int a[10000],b[10000];
int main(){
    int n,fa,fb,la,lb,cnt;
    while(cin>>n&&n!=0){
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }//读入田忌的马
        for(int i=1;i<=n;i++){
            cin>>b[i];
        }//读入齐王的马
        sort(a+1,a+n+1,cmp);
        sort(b+1,b+n+1,cmp);
        fa=1;
        la=n;
        fb=1;
        lb=n;//赋值最快最慢的马
        cnt=0;
    for(int i=1;i<=n;i++){
    if(a[fa]>b[fb]){
        cnt++;
        fa++;
        fb++;//(在数组里通过移动此变量的位置来实现当前最快最慢的马的赋值)
    }else if(a[la]>b[lb]){
        cnt++;
        la--;
        lb--;
    }else{
        if(a[la]<b[fb]){
            cnt--;
            la--;
            fb++;
        }
    }
}
cout<<cnt*200<<endl;
}
    return 0;
}

HOORUS 巨献

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

贪心算法之田忌赛马(超详细) 的相关文章

  • 互联网摸鱼日报(2023-09-05)

    互联网摸鱼日报 2023 09 05 36氪新闻 蔚小理上半年比拼 谁拿住了不下牌桌的筹码 一杯酱香拿铁 年轻人就能爱上茅台 关于瑞幸酱香拿铁的一些疑问 为什么不直接滴酒 是科技与狠活吗 小红书关停自营电商业务 本硕加入抢单 千万外卖员 卷
  • 生成专题3

    文章转自微信公众号 机器学习炼丹术 作者 陈亦新 欢迎交流共同进步 联系方式 微信cyx645016617 学习论文 Analyzing and Improving the Image Quality of StyleGAN 文章目录 3
  • Poco C++库简介

    学习一个框架前 要先明白它的是什么 为什么 怎么用 下面这些文字 是从中文poco官网上转过来的 正如poco c 库的特点 非常清晰 代码风格更是一目了然 poco开发库的特点 非常适合写后台处理程序 效率也是很高的 前台界面程序使用Qt
  • 2022华为杯研究生数学建模解题思路和代码思路

    本博客将持续更新2022研究生数学建模ABCDEF赛题的思路 一 题目 2022华为杯A题 华为题 移动场景超分辨定位问题 在日常家庭生活中 人们可能需要花费大量时间去寻找随意摆放在家中某些角落里的小物品 但如果给某些重要物品贴上电路标签
  • 原子类型AtomicLong用法探究

    AtomicLong 探究 AtomicLong 是 Java 提供的一个原子长整型类 提供了对长整型数据的原子性操作 在多线程环境下 AtomicLong 可以确保对长整型数据的操作是线程安全的 在 Android 中 AtomicLon

随机推荐

  • IBM Websphere安装配置与项目部署

    Websphere安装配置 1 在IBM官网下载安装包 需注册账户 不要偷懒 账户后边需要用到 而且注册不需要审核很简单 一分钟即可搞定 下载地址 下载需要通过审核 可能一天后才可以 点击打开链接 最下方下载win64位版本即可 将得到EX
  • Vrep学习笔记(二)

    四 基于Dummy和path的路径规划 4 1 Dummy和path Path用来自定义各种运动路径 从Path上我们可以给定某一个时刻机器人运动到某一点的位置以及其姿态 定义机器人在整个路径中每一时刻的运动过程 V REP中默认的Path
  • 【大数据】分布式机器学习平台

    记录一下团队之前搭建的分布式机器学习平台 功能展示 架构图 平台演变 前端页面 SparkML和sklearn模型训练耗时记录
  • vue从入门到放弃(四)

    vue filter过滤器 filterDemo vue
  • 某省电子税务局网上系统报账及报税状态自动查询(python程序)

    该自动批量查询工具的目的是给一些代记账的公司使用 可以让他们快捷的知道目前有哪些公司需要进行哪些项目的申报 因为他们需要给很多家公司进行报账 多的有四五百家 普遍做法是在税务系统每次都人工登录每个公司 然后查看公司申报状态后进行操作 这样的
  • java和javaEE、Javase有什么区别?

    Java分三个版本 Java SE 标准版 Java EE 企业版 Java ME 微型版 其中SE就是大家学的Java基础 EE是公司最常用的用于网站开发 PC端 ME用于移动端开发 现在熟悉的安卓系统就是用JAVAME开发的 Java既
  • 口罩检测——模型推理(5)

    文章目录 前言 一 推理准备 二 推理代码 三 结果演示 总结 前言 终于等到你 还好我没有放弃 最后一部分 sbb 上代码 一 推理准备 增加一个文件labels txt 内容是我们的标签 注意放置位置 增加一个inference ipy
  • Lexicography——CF1267L构造题

    L Lexicography time limit per test3 seconds memory limit per test512 megabytes inputstandard input outputstandard output
  • 栈的创建和基本操作

    栈 LIFO 限定仅在表尾进行插入和删除操作的线性表 简单来说就是最后一个进入最早出来 顺序栈 用数组实现 下标为0的一端作为栈底 另一端为栈顶 用top作为栈顶指针 我们定义空栈时top 1 栈结构 typedef struct SqSt
  • wr885n虚拟服务器设置,tp-link wr885n如何用手机设置

    摘 要 下面将给大家详细介绍 用手机设置tp link wr885n路由器上网的方法 这是tp link很早就推出的路由器了 第一步 路由器线路连接 tp link wr885n这台路由器上有5个网线接口 下面将给大家详细介绍 用手机设置t
  • std : : unordered_map 、 std : : unordered_set

    一 简介 std unordered map 是C 标准库中的一种关联容器 它提供了一种用于存储键 值对的数据结构 其中键是唯一的 且不会按特定顺序排序 与 std map 不同 std unordered map 使用哈希表作为其底层数据
  • C++实现字典数据结构

    本文使用C 构建了一个字典数据结构 未使用STL 实现了一个学生成绩录入系统 进而实现了字典数据对象的如下功能 新建一个字典 检查字典非空 得到字典的数据长度 插入一个数对 按学生姓名删除对应的字典数据 按分数查找所有符合的学生姓名 按姓名
  • 自动贩卖机的c语言,自动售货机体统c++编程 问题描述】 自动售货机可以售出A、B、C三种商品,价格分别为1元、2元、知道...

    满意答案 include stdio h include conio h structstDrink floatfPrice 价格intiLeft 剩余数 voidPay stDrink pstPay floatfPay 0 0f if p
  • libuv 多线程与队列

    libuv 多线程与队列 一 libuv编译环境 1 可查看另一篇 libuv 介绍与编译 http mp blog csdn net postedit 79193274 二 原理图 程序代码 main c include
  • canvas做一个简单气泡图

    数据结构 name 土豆 num 200 name 西瓜 num 80 name 黄瓜 num 85 name 粉丝 num 70 name 苹果 num 75 name 香蕉 num 30 name 樱桃 num 5 name 橙子 nu
  • 使用kotlin编写一个无障碍服服务

    Kotlin 是一种非常强大的编程语言 可以轻松实现无障碍服务 它拥有丰富的 API 和库 可以帮助开发人员更轻松地构建可用性强的应用程序 它还具有简单的语法 使开发人员可以快速开发出可靠的无障碍服务
  • JVM常见面试题

    一 了解JVM的发展史 1 Sun Classic VM 早在1996年Java1 0版本的时候 Sun公司发不了一款名为Sun Classic vm的java虚拟机 它同时也是世 界上第一款商业java虚拟机 jdk1 4 时完全被淘汰
  • Qt 实现点击按钮窗体某个部分出来,再点击回去,循环反复

    ui gt widget 3 gt setVisible false ui gt widget 4 gt setVisible false this gt resize 473 229 connect ui gt pushButton 2
  • java合并数组的方法

    在 Java中 数组是一种重要的数据结构 在 Java中数组的操作方式有两种 一种是直接使用数组来操作 另一种是通过引用计数或者双指针对数组进行操作 对于直接使用数组来操作的方式 我们可以通过两个方法来实现 一种是将数组作为参数传递给方法
  • 贪心算法之田忌赛马(超详细)

    简述 手把手教会贪心算法之田忌赛马 超详细 题目 田忌赛马 田忌和齐王赛马 两人各出n匹马 赢一场比赛得200两银子 输了赔200银子 平局不赔不赚 已知两人每匹马的速度 问田忌最多能赢多少银子 多组测试数据 每组数据的第一行是一个整数n