洛谷P1650 田忌赛马(dp) 传送门 解题思路 本题从暴力dfs入手,推出dp转移方程。 先进行排序,速度越大编号越大。 假设齐王从最大开始的出马,dfs(now,l,r)表示齐王出到编号为now的马,田忌还剩下l-r之间的马(因为田忌一定是要么出最大的马,要么出最小的马)。 分类讨论,当田忌最大的马大于齐王,则一定拿下这...
1: 如果在剩下的所有马里,如果田忌跑的最快的马,比齐王跑的最块的马还快,那么田忌自然需要让马出场,赢了这把。 2: 如果在剩下的所有马里,如果田忌跑的最快的马,比齐王跑的最块的马要慢,那么这样田忌所有的马绝对没有可能会赢齐王最快的马了,反正都是输,所以这个时候我们只能用田忌最烂的马去把齐王最好...
1: 如果在剩下的所有马里,如果田忌跑的最快的马,比齐王跑的最块的马还快,那么田忌自然需要让马出场,赢了这把。 2: 如果在剩下的所有马里,如果田忌跑的最快的马,比齐王跑的最块的马要慢,那么这样田忌所有的马绝对没有可能会赢齐王最快的马了,反正都是输,所以这个时候我们只能用田忌最烂的马去把齐王最好...
田忌赛马问题的核心就是对两端的即将退化的元素进行操作。序列两端的马往往可以找到对应确定的对手。这是一种基于元素的贪心法。另外有基于步数的贪心。 这个确定的最优关系是贪心法证明的实质。通过对序列中每一个元素都找到对应的最“佳”对手——换句话说是对田忌更有利的对手——最终的结果将是田忌利益最大化。
仅一行,一个整数,表示田忌最大能得到多少银币。 输入输出样例 输入#1 3 92 83 71 95 87 74 1. 2. 3. 输出#1 200 1. 分析 代码 // Problem: P1650 田忌赛马 // Contest: Luogu // URL: https://www.luogu.com.cn/problem/P1650 // Memory Limit: 125 MB ...
P1650 田忌赛马 贪心。 从最小的马开始考虑。我们肯定优先让这匹最小的马赢。 实在赢不了了就去自杀。这样可以保证最优,因为不管哪匹马都是一样的代价,虽然小的把可以赢的位置占了,但是大的可以有更多机会赢其他马,所以这样是对的。 但是还要考虑平局。
田忌和齐王各有n匹马,赛马时一一对应。赢+200,输-200,平+0. 问最多多少钱? 数据范围:n≤2000n≤2000 Solution 如果没有平局 将齐王和田忌的马都按照速度从大到小排序。然后同时从两方最大的开始考虑。 设齐王当前最大的马为x,最小的为y;田忌最大的为a,最小的为b; ...
P1650 田忌赛马(贪心) 同 泡泡堂 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; const int N=20005; int a[N],b[N],n; int solve(){ int ans=0; int s=1,t=n,l=1,r=n; while(s<=t&&l<=r){
Luogu P1650 田忌赛马 题目 如果我们最大比对面最大大,那么直接用。 如果我们最小比对面最小大,那么直接用。 否则用我们最小去换对面最大。 AI检测代码解析 #include<bits/stdc++.h> using namespace std; inline int read() { register int x=0;...
P1650 田忌赛马 题目描述 我国历史上有个著名的故事: 那是在2300年以前。齐国的大将军田忌喜欢赛马。他经常和齐王赛马。他和齐王都有三匹马:常规马,上级马,超级马。一共赛三局,每局的胜者可以从负者这里取得200银币。每匹马只能用一次。齐王的马好,同等级的马,齐王的总是比田忌的要好一点。于是每次和齐王赛马...