洛谷P1650 田忌赛马【DP+贪心】【绿】

c++田忌赛马(C语言) 在田忌赛马的故事中,孙膑用自己的下等马对战对手的上等马,自己上等马对阵对手的中等马,自己的中等马对阵对手的下等马,从而赢得了胜利。已知只有当我方马的等级比对方马等级高X等以上(包含X)时,我方才可以取得这场比赛的胜利。如果在N场比赛中我方的胜场数大于对方,则我方取得最终的胜利。现在已知对方这N场比赛的出战方案,请计算所有令我方最终获胜的出战方案。A(i)表示第i场比赛对方马的等级,1≤i≤N。每行是N个正整数,第i个数表示我方第i场比赛马的等级。 阅读详情

Date:2022.03.22
题目描述
我国历史上有个著名的故事: 那是在2300年以前。齐国的大将军田忌喜欢赛马。他经常和齐王赛马。他和齐王都有三匹马:常规马,上级马,超级马。一共赛三局,每局的胜者可以从负者这里取得200银币。每匹马只能用一次。齐王的马好,同等级的马,齐王的总是比田忌的要好一点。于是每次和齐王赛马,田忌总会输600银币。
田忌很沮丧,直到他遇到了著名的军师――孙膑。田忌采用了孙膑的计策之后,三场比赛下来,轻松而优雅地赢了齐王200银币。这实在是个很简单的计策。由于齐王总是先出最好的马,再出次好的,所以田忌用常规马对齐王的超级马,用自己的超级马对齐王的上级马,用自己的上级马对齐王的常规马,以两胜一负的战绩赢得200银币。实在很简单。
如果不止三匹马怎么办?这个问题很显然可以转化成一个二分图最佳匹配的问题。把田忌的马放左边,把齐王的马放右边。田忌的马A和齐王的B之间,如果田忌的马胜,则连一条权为200的边;如果平局,则连一条权为0的边;如果输,则连一条权为-200的边……如果你不会求最佳匹配,用最小费用最大流也可以啊。 然而,赛马问题是一种特殊的二分图最佳匹配的问题,上面的算法过于先进了,简直是杀鸡用牛刀。现在,就请你设计一个简单的算法解决这个问题。
输入格式
第一行一个整数n,表示他们各有几匹马(两人拥有的马的数目相同)。第二行n个整数,每个整数都代表田忌的某匹马的速度值(0 <= 速度值<= 100)。第三行n个整数,描述齐王的马的速度值。两马相遇,根据速度值的大小就可以知道哪匹马会胜出。如果速度值相同,则和局,谁也不拿钱。
【数据规模】
对于20%的数据,1<=N<=65;
对于40%的数据,1<=N<=250;
对于100%的数据,1<=N<=2000。
输出格式
仅一行,一个整数,表示田忌最大能得到多少银币。
输入输出样例
输入 #1复制
3
92 83 71
95 87 74
输出 #1复制
200

思路:每次都要冲着赢去,因此田忌先用最快马比较,快则先赢下这一句;慢则用目前剩下的最慢马输,以最好地保留实力;平局不太好说,因此dp的主要是平局情况。此外,注意最大值可能为负,注意初始化边界。
代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N = 3010;
int n,m,f[N][N],a[N],b[N],sum[N];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>b[i];
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+1+n);reverse(a+1,a+1+n);
    sort(b+1,b+1+n);reverse(b+1,b+1+n);
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=i;j++)
        {
            f[i][j]=-1e9;
            int x=0,y=0;
            if(b[j]>a[i]) x=1;
            else if(b[j]<a[i]) x=-1;
            else x=0;
            if(j>0) f[i][j]=max(f[i][j],f[i-1][j-1]+x);
            if(b[n-(i-j)+1]>a[i]) y=1;
            else if(b[n-(i-j)+1]<a[i]) y=-1;
            else y=0;
            f[i][j]=max(f[i][j],f[i-1][j]+y);
        }
    }
    int maxx=-1e9;
    for(int j=0;j<=n;j++)
        maxx=max(maxx,f[n][j]);
    cout<<maxx*200;
    return 0;
}
田忌赛马(贪心算法)C++ 问题描述: 你一定听说过田忌赛马的故事吧?如果3匹马变成n匹(n<=100),齐王仍然让他的马按照优到劣的顺序初赛,田忌可以按任意顺序选择他的赛马出赛。赢一局,田忌可以得到200两银子;输一局,田忌就要输掉200两银子。已知道国王和田忌的所有马的奔跑速度,请设计一个算法,帮助田忌赢得最多的银子。 输入: 第一行一个整数n,表示双方各有n匹马; 第二行n个整数分别表示田忌的n匹马的速度; 第三行n个整数分别表示齐王的n匹马的速度。 输出: 输出对田忌来说最好的结果 贪心策略: 1,如果田忌的最快马快于齐 阅读详情

相关推荐

实验——田忌赛马c++

故事概述: 孙膑先以下等马对齐威王的上等马,第一局田忌输了。接着进行第二场比赛。孙膑拿上等马对齐威王的中等马,获胜了一局。 第三局比赛,孙膑拿中等马对齐威王的下等马,又战胜了一局。 比赛的结果是三局两胜,田忌赢了齐威王。 还是同样的马匹,由于调换一下比赛的出场顺序,就得到转败为胜的结果。 问题描述: 如果3匹马变成n匹(n<=100),齐王仍然让他的马按照优到劣的顺序初赛,田忌可以按任意顺序选择他的赛马出赛。赢一局,田忌可以得到200两银子;输一局,田忌就要输掉200两银子。已知道国王和田忌的所有马的

m0_48295050的博客 2650

c++问题:田忌赛马(贪心)

田忌和齐王赛马, 他们各有 n 匹马,依次派出一匹马进行比赛, 每一轮获胜的一方将从输的一方获得 200 银币, 平局则不用出钱。田忌知道所有马的速度值,且田忌可以安排每轮双方出场的马。若此时田忌<=齐王,将田忌慢马与齐王快马比赛(与慢马或快马进行比赛,都是不可能赢的,何不换取更大的利益)。输入包含若干组数组, 每个数据的第 1 行是一个整数 n (n≤1000),表示齐王和田忌各有 n 匹马, 后面的两行每行有 n 个数,分别表示田忌 n 匹马和齐王 n 匹马的速度值。1、田忌>齐王:正常比赛。

Sz_winwater的博客 4597

洛谷 P1650 田忌赛马 Ac代码 (简单的 “桶排序”)

用“桶排序”的方法简单解决“洛谷 P1650 田忌赛马” “Dp” “贪心”初学者不容易理解,高级者容易被洗脑

a13923919842的博客 363

C++星级问题02:田忌赛马

齐国大将田忌,很喜欢赛马。一次他与齐威王约定,进行一场比赛。他们准备将马分为上、中、下三等马。可田忌太笨了,他不知道怎么分,于是找到了你。现在输入3个浮点数,表示3匹马的速度,请从小到大输出。注意,这里使用的是万能头文件,可能您的编译器不受支持。如不受支持,请改为iostream头文件。只需要输入变量后,使用min、max函数和+、-运算符即可。3个整数,表示3匹马的速度。从小到大排序后的3个数。

zhwexu0025027的博客 2391

centos7 python3.12.1 报错 No module named _ssl,坑我几个小时

网上的教程很多,但几乎是无效的,跟着我这教程,可以完美解决。

Amio_的博客 1万+

C#上位机与VisionPro通用框架:视觉标定、通信联动与现场排坑实战

工业自动化设备的上位机开发,往往面临流程控制、视觉检测、通信交互等环节的重复搭建。C#作为主流工业语言,配合VisionPro视觉软件,可通过通用框架设计将状态机调度、相机采集、标定算法与串口/扫码枪通信等底层能力模块化,从而大幅降低项目交付成本。其核心原理在于:将设备工艺差异封装至配置层,视觉流程通过CogToolBlock工具链与VPP模板复用,九点标定建立像素与机械坐标系的映射关系。该方案已在螺丝锁付、点胶定位等多类产线落地,尤其适用于批量交付、换型频繁的视觉设备场景。这套从实践中沉淀的框架思路,以及

weixin_31102231的博客 337

P1650 田忌赛马,贪心,线性dp

由于齐王总是先出最好的马,再出次好的,所以田忌用常规马对齐王的超级马,用自己的超级马对齐王的上级马,用自己的上级马对齐王的常规马,以两胜一负的战绩赢得 200 银币。齐王的马好,同等级的马,齐王的总是比田忌的要好一点。2.a 中剩下的最慢的马不比 b 中剩下最慢的马快,且比 b 中最快的马慢,则用 a 中最慢的马输给 b 中最快的马,否则说明剩下的马都能两两打平。其实如果存在这种情况,那么 a 中倒数第二慢的马一定能赢 b 中最慢的马(因为性质的最后一句),且 a 中最快的马一定能赢 b 中第二快的马。

Landing_on_Mars的博客 358

华为OD机试 - 机器人活动区域(Python/JS/C/C++ 双机位C卷 200分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。当相邻网格的数字编号差值的绝对值小于等于 1 时,机器人可在网格间移动问题:求机器人可活动的最大范围对应的网格点数目。说明:1)网格左上角坐标为 (0, 0),右

学Java,找哪吒 1432

[洛谷P1650] 田忌赛马

贪心难题;总结贪心问题的一般思路 传送门:$>here<$ 题意 田忌和齐王各有n匹马,赛马时一一对应。赢+200,输-200,平+0. 问最多多少钱? 数据范围:$n \leq 2000$ Solution 如果没有平局 将齐王和田忌的马都按照速度从大到小排序。然后同时从两方最大的开始考虑。 设齐王当前最大的马为x,最小的为y;田忌最大的为a,最小的为b; ...

weixin_30725467的博客 344

ArcGIS笔记2_如何将经纬度WGS84地理坐标系转换为米单位CGCS2000投影坐标系

本博文则主要讲解,如果我们手里拿到的shp文件是在ArcGIS中,如何将经纬度WGS84地理坐标系转换为米单位CGCS2000投影坐标系。

晏长街的博客 4万+

山羚羊优化算法(MGO)详解:从自然智慧到优化引擎

山羚羊优化算法(MGO)是一种新型元启发式算法,灵感来源于山羚羊的社会行为和等级制度。该算法模拟了四种核心行为:领地独居雄性(局部开发)、母系山瞪羚群(群体协作)、单身雄性山瞪羚(全局探索)和迁徙觅食(动态扰动)。MGO通过数学建模将这些生物行为转化为优化机制,在探索与开发间实现平衡。算法已成功应用于函数优化、无人机路径规划和支持向量机优化等领域,展现出优异的性能。未来研究将聚焦于参数自适应调整、混合算法设计等方向,以进一步提升算法性能。

qq_42212808的博客 203

P1650 田忌赛马[普及+提高】DP

田忌赛马 - 洛谷 首先对大王的进行从高到低排序,也顺便对田忌进行排序。如果田忌头部马能够战胜本局大王马,那么就出队,否则选择最末尾的马,那么每局也就有两种情况,选择末尾马,选择头部马。dp[i][j]代表第i轮时,田忌前面出了j匹马。他可以本轮出第j匹马,也可以i-1轮出到j匹马,本轮出第min(n,n-(i-j)+1)的马。【因为为了凑够i匹,必须从最后选出剩余的】 第一轮时, dp[1][1] dp[1][0](最后一匹马)分别处理 第二轮 dp[2][1] 依靠dp[1][1]与d...

jisuanji2606414的博客 861

03 Token、Embedding、上下文窗口:开发者必须懂的三个基本概念

Token、Embedding 和上下文窗口是大模型应用开发的三个基础概念。本文从成本、速度、检索和上下文设计四个角度讲清它们的工程意义,帮助开发者理解为什么同一段内容会超限、变贵,为什么 RAG 能做语义检索。

老于的笔记的专栏 407

【洛谷P1650】田忌赛马——杨子曰题目

【洛谷P1650】田忌赛马——杨子曰题目 题目描述 我国历史上有个著名的故事: 那是在2300年以前。齐国的大将军田忌喜欢赛马。他经常和齐王赛马。他和齐王都有三匹马:常规马,上级马,超级马。一共赛三局,每局的胜者可以从负者这里取得200银币。每匹马只能用一次。齐王的马好,同等级的马,齐王的总是比田忌的要好一点。于是每次和齐王赛马,田忌总会输600银币。 田忌很沮丧,直到他遇到了著名的军师――...

杨子曰:代码是神奇的 1191

9篇3章3节:FAERS数据库公共仪表板搜索功能操作与解析

FAERS(FDA不良事件报告系统)公共仪表板是一个强大的工具,用于查询和分析药物及生物制品的不良事件数据。通过该仪表板,用户可以按药品或不良反应进行搜索,查看报告数量、事件类型及时间分布,从而辅助药物安全性分析和科研研究。本文重点介绍仪表板的搜索功能,包括按产品和按不良反应查询的操作步骤、筛选与多维数据分析方法,以及关键概念的解释,帮助用户科学、理性地使用FAERS数据,提升用药决策的准确性和安全性。

MD Code 1585

避坑指南:新手爬百度图片3个致命错,改完批量保存本地(亲测有效)

新手爬百度图片的核心是“绕开静态HTML,抓准API接口+处理反爬+提取原图”,改完本文提到的3个核心错,就能稳定批量保存高清图片。这套思路可复用在其他图片网站(如必应图片、360图片),只需修改API接口和参数即可。如果想进一步优化,可添加代理IP池、多线程下载(新手不建议,容易触发反爬)、图片去重等功能!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1586

建立一个学习计划,每天一道 dp题

这个博客每天打卡更新:

不知所云的博客 725

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

P1650 赛马

P1650 赛马 题目描述 我国历史上有个著名的故事: 那是在2300年以前。齐国的大将军田忌喜欢赛马。他经常和齐王赛马。他和齐王都有三匹马:常规马,上级马,超级马。一共赛三局,每局的胜者可以从负者这里取得200银币。每匹马只能用一次。齐王的马好,同等级的马,齐王的总是比田忌的要好一点。于是每次和齐王赛马,田忌总会输600银币。 田忌很沮丧,直到他遇到了著名的军师――孙膑。田忌采用了孙膑的计...

weixin_33700350的博客 394

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

田忌赛马(C++)

2418. 按身高排序在介绍田忌赛马这道题目之前,我们需要先对这个道题目进行一定的掌握。我们解决这道题目有很多方法,我们这里仅仅介绍一种最常用的。题目中我们并不想排序后改变原始位置,我们可以用下面方法:🌟1.创建一个数组下标🌟2.对数组下标通过重写比较方法进行重新排序🌟根据重新排序后的结果,找到原数组的信息。public://1.创建一个数组下标i

lim6ere的博客 1403

简版田忌赛马(C++和C实现)

这是一个简版田忌赛马问题,具体如下:田忌与齐王赛马,双方各有n匹马参赛,每场比赛赌注为200两黄金,现已知齐王与田忌的每匹马的速度,并且齐王肯定是按马的速度从快到慢出场,请写一个程序帮助田忌计算他最多赢多少两黄金(若输,则用负数表示)。简单起见,保证2n匹马的速度均不相同。

2303_80007907的博客 2637

算法(赛马问题)图解

64匹马8个跑道需要多少轮才能选出最快的4匹?(无计时) ①八场,每场八个,取每场前四名,淘汰每场后四匹 ②一场,每场第一名(a1b1c1d1e1f1g1h1)一起跑,出现全场第1名,淘汰后四名的队,剩余15匹 保留第一名队的后三位(a2a3a4),第二队的前三位(b1b2b3),第三队的前两位(c1c2),第四对的第一位(d1),剩余9匹马 ③一场,除第一队第四位之外的八匹马再跑一遍,出现234...

Y_yibao的博客 3953

田忌赛马 C++题目(一维数组)

田忌赛马 题目描述 Description 田忌赛马的故事已家喻户晓,大家也耳熟能详,即是以不同的排列顺序来支配上中下三等马来赢得比赛,体现了一种博弈的思维。现如果稍改一下比赛的规则,田忌和齐威王都按照某一周期性规律出马对战,比如:“上-下 上-中-上-下-上-中……”,就是以“上-下-上-中”为周期不断循环。胜负还是以“上等马赢中等马和下等马,中等马赢下等马,若两只马等级一样,则打平”。...

Amaycard的博客 8785

田忌赛马 C++实现

/** * 田忌赛马问题 * @author liule * (1)最快马。若田忌快,则使用田忌最快马对齐王最快马 * (2)最快马。若齐王快,则使用田忌最慢马对齐王最快马 * (3)最快马。两者同速: * ①:最慢马田忌快,则使用田忌最慢马对齐王最慢马。 * ②:最慢马齐王快,则使用田忌最慢马对齐王最快马。 * 以上每一步选择均是最优,因此结果最优。 */ #include<iostream> #include<vect

乐酱的博客 4221

数据结构算法刷题(11)田忌赛马

田忌赛马的主要思想是:如果劣等马能够比得过齐王的劣等马,就直接得分,如果比不过,就让它对阵齐王目前的最优马(挑最好的送人头)将田忌的马nums1递增排序,用劣马对抗劣马,如果对抗不过就去齐王的最优马处送人头,然后right++,换剩下元素的最优值。nums2[b[left]]就表示nums2中的最小值,nums2[b[right]]就表示nums2的最大值。res[b[right]] = i #将该值写入nums2最大值的的位置。res[b[left]] = i #将该值写入有优势的下标处。

sinounuo的博客 238

田忌赛马c++

/ C++参考代码1。

fusca123的博客 496

matlab编程田忌赛马,田忌赛马 - 数据结构与算法 - 编程论坛

最好的结果就是田忌出场次序调整后能赢最多的黄金 。有两个想法,1 穷举法,肯定能计算出赢最多的两黄金数。2 研究规律穷举就不说了。假设3匹马王的马的速度:8 5 3田的马的速度:7 4 1 田最多赢2场,取决于田最快马的速度,和王最慢马的速度。王:10 8 6 4 3田 6 5 4 3 2 田最多赢2场 。规律 FunMax() ----田最快马速度大于王的马速度...

weixin_42388716的博客 1068
上一篇: 洛谷P1622 释放囚犯【区间DP】【绿】
下一篇: acw901.滑雪【记忆化搜索DP】
lppppppp666
博客等级 码龄7年 11粉丝 200原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值