贪心算法之田忌赛马,多种语言实现

这篇博客介绍了如何使用贪心算法解决田忌赛马问题。通过将马的速度排序并进行比较,找到最优匹配策略,从而在比赛中获得最多胜利。文章提供了C、C++、Python和Java四种语言的代码实现。
摘要由CSDN通过智能技术生成

目录

题目描述:

 输入:

样例输入:

 样例输出:

c代码实现:

c++代码实现:

python代码实现:

Java代码实现:


题目描述:

这是中国历史上一个著名的故事。

“那是大约2300年前的事了。田骥将军是齐国的高级官员。他喜欢和国王和其他人一起赛马。

“田和王都有三匹不同等级的马,分别是普通马、加马和超级马。规则是一场比赛进行三轮;每匹马必须在一轮中使用。一轮的获胜者从失败者那里拿走两百银元。

“作为全国最有权势的人,国王拥有如此出色的马匹,以至于他的马匹在每个级别上都比田氏的好。结果,每次国王都会从田氏那里拿走六百银元。

“田骥对此并不高兴,直到他遇到了中国历史上最著名的将领之一孙膑。用了孙某的小招数,田姬带回了两百银元,下一场比赛就这么大恩了。

“这是一个相当简单的技巧。用他的常规级赛马与国王的超级级赛马,他们肯定会输掉那一轮。但后来他的加号打败了国王的常客,他的超级打败了国王的加号。多么简单的技巧。你又如何看待田姬这位中国高官呢?

如果田姬活在现在,他肯定会自嘲的。更重要的是,如果他现在参加ACM比赛,他可能会发现赛马问题可以简单地看作是在二分图中找到最大匹配。一边画田的马,另一边画国王的马。每当田氏的一匹马能打败国王的一匹马时,我们就会在它们之间划出一条优势,这意味着我们希望建立这对马。那么,赢得尽可能多的回合的问题就是在这个图中找到最大的匹配。如果存在平局,问题就变得更加复杂,他需要为所有可能的边分配权重 0、1 或 -1,并找到最大权重完美匹配......

然而,赛马问题是二分匹配的一个非常特殊的案例。该图由马的速度决定,---较快速度的顶点总是击败较低速度的顶点。在这种情况下,加权二分匹配算法是一个过于先进的工具,无法处理这个问题。

在这个问题中,你被要求编写一个程序来解决这个特殊的匹配问题。

 输入:

 输入由许多测试用例组成。每种情况都以第一行上的正整数 n (n <= 1000) 开头,即每边的马数。第二行接下来的n个整数是田氏马的速度。那么第三行接下来的 n 个整数就是国王的马的速度

样例输入:

3
92 83 71
95 87 74
2
20 20
20 20
2
20 19
22 18

 样例输出:

200
0
0

思路解释:

先将田忌和齐威王的马从小到大排序:

并设立几个变量,变量:n(马的数量),ans(银元数,正数表示田忌获得的银元反之表示失去的银元),a[maxn](田忌的马存储在数组a中),b[maxn](齐威王的马存储在数组b中),lefta(田忌的最慢的马的下标),righta(齐威王最快的马的下标),leftb(齐威王最慢的马的下标),rightb(齐威王最

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

善程序员文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值