当前位置: 首页 > news >正文

田忌赛马模型 ← 双指针 + 排序 + 贪心

【田忌赛马模型
(一)田忌赛马模型 → “一对一匹配求最大获胜次数” 的贪心问题
● 田忌赛马模型的核心是“局部最优推导全局最优”,核心策略可总结为三句话(对应代码中的三个分支):
(1)能赢则赢:用田忌当前最弱的马,去赢齐王当前最弱的马(不浪费强马,最大化赢的场次);
(2)赢不了则消耗:如果田忌最弱的马赢不了齐王最弱的马,就用这匹弱马去消耗齐王最强的马(止损,避免强马被浪费在打弱马);
(3)平局看强马:如果田忌最弱的马和齐王最弱的马平局,就看田忌最强的马:
        ☆ 若能赢齐王最强的马 → 用强马赢强马(赚 1 场);
        ☆ 若赢不了 → 还是用弱马消耗齐王最强的马(避免平白亏)。
● 田忌赛马模型的关键细节
(1)排序必须是升序(方便用左指针指最弱、右指针指最强);
(2)指针移动规则:“赢”则两个左指针右移、“消耗”则田忌左指针右移+齐王右指针左移、强马赢强马则两个右指针左移
(3)循环终止条件:a_le<=a_ri(田忌的马匹配完)。
● 田忌赛马模型的核心记忆点:排序定强弱,双指针控匹配,弱马赢弱马,弱马耗强马。

(二)田忌赛马模型代码

#include <bits/stdc++.h>
using namespace std;const int N=1e5+5;
int a[N],b[N]; //a:Tian Ji's horse, b:King Qi's horseint main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;cin>>n;for(int i=1; i<=n; i++) cin>>a[i];for(int i=1; i<=n; i++) cin>>b[i];//Step 1: Sort in ascending ordersort(a+1,a+1+n);sort(b+1,b+1+n);int a_le=1,a_ri=n; //Tian Ji's left and right indicatorsint b_le=1,b_ri=n; //King Qi's left and right indicatorsint win_cnt=0;       //number of victories//Step 2: Greedy Matchingwhile(a_le<=a_ri) {if(a[a_le]>b[b_le]) win_cnt++,a_le++,b_le++;else if(a[a_le]<b[b_le]) a_le++,b_ri--;else {if(a[a_ri]>b[b_ri]) win_cnt++,a_ri--,b_ri--;else {if(a[a_le]<b[b_ri]) a_le++,b_ri--;else a_le++,b_le++;}}}cout<<win_cnt<<endl;return 0;
}/*
in:
5
10 3 5 8 7
4 6 1 2 9out:
5
*/

(三)田忌赛马模型简化版(洛谷 B3928:[GESP202312 四级] 田忌赛马)代码 → https://blog.csdn.net/hnjzsyjyj/article/details/158039999

#include <bits/stdc++.h>
using namespace std;const int N=5e4+5;
int a[N],b[N];
int cnt,n;int main() {cin>>n;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);sort(b+1,b+n+1);for(int i=1,j=1; i<=n; i++) {if(a[i]>b[j]) cnt++,j++;}cout<<cnt;return 0;
}/*
in:
5
10 3 5 8 7
4 6 1 2 9out:
5
*/





【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/158039999
https://blog.csdn.net/hnjzsyjyj/article/details/127443450
https://blog.csdn.net/ra90fy/article/details/144151505
https://www.luogu.com.cn/problem/solution/B3928



 

http://www.jsqmd.com/news/379371/

相关文章:

  • 热门激光切管机怎么选?2026十大品牌深度解析,选购指南在此 - 匠言榜单
  • 测试一下 Lovable 生成的网页效果
  • C#中如何防止序列化文件丢失和损坏
  • Java毕设项目推荐-基于SpringBoot的实验室共享预约系统基于springboot中学物理实验预约系统【附源码+文档,调试定制服务】
  • 教培管家第03讲:集结号角——接入企微机器人完成新线索通知
  • 【开题答辩全过程】以 基于Java的网上书店销售系统的设计与实现为例,包含答辩的问题和答案
  • 实用指南:GitHub Copilot 使用笔记
  • 【开题答辩全过程】以 基于Java的甜品蛋糕网上商城的设计与实现为例,包含答辩的问题和答案
  • 【计算机毕业设计案例】基于web的高考志愿填报系统的设计与实现智能推荐高考志愿辅助填报系统的设计与实现(程序+文档+讲解+定制)
  • 出来年终总结了!今天不聊技术咯,只唠唠 25 年的「副业收入」和「AI 对我的影响」25年 我的额外收入关注我的都知道,我目前的工作算是比较轻松吧,
  • 【路径规划】多因素蚁群算法的移动机器人路径规划研究附Matlab代码
  • 【电力系统】光伏VSG-基于虚拟同步发电机的光伏并网逆变器系统附Simulink仿真
  • 【预测模型】麻雀算法改进BP神经网络的风电功率预测附Matlab代码
  • 【开题答辩全过程】以 基于Java的体育竞赛管理的设计与实现为例,包含答辩的问题和答案
  • LAN9252学习笔记(一)
  • OpenClaw工作原理
  • 基于遗传算法车辆路径优化附Matlab代码
  • 从“意识”到“自感”:AI主体性研究的范式革命
  • 45645645
  • 一天一个开源项目(第21篇):Claude-Mem - 为 Claude Code 打造的持久化记忆压缩系统
  • 期货反向跟单—从小白到高手进阶历程 六十九(为什么大部分团队会人工干预?)
  • 57578
  • 【易经系列】《蒙卦》上九:击蒙,不利为寇,利御寇。
  • 新年告别项目管理“抓瞎”,DooTask开启高效“开挂”模式
  • Understanding JSON Formats - What JSON to Excel Supports - 教程
  • 洛谷 B3928:[GESP202312 四级] 田忌赛马 ← 双指针 + 排序 + 贪心
  • 【毕设】大学生科创项目在线管理系统设计与实现
  • 【Oracle】Oracle rac1 节点ora.chad offline解决方案
  • 2026年广州公司搬家服务评测推荐榜单:告别搬迁混乱,高效省心之选 - 品牌推荐
  • 洛谷选题:P1888 三角函数