news 2026/5/4 7:50:05

P1199 三国游戏【洛谷算法习题】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
P1199 三国游戏【洛谷算法习题】

P1199 三国游戏

网特链接

P1199 三国游戏

题目描述

小涵很喜欢电脑游戏,这些天他正在玩一个叫做《三国》的游戏。

在游戏中,小涵和计算机各执一方,组建各自的军队进行对战。游戏中共有N NN位武将(N NN为偶数且不小于4 44),任意两个武将之间有一个“默契值”,表示若此两位武将作为一对组合作战时,该组合的威力有多大。游戏开始前,所有武将都是自由的(称为自由武将,一旦某个自由武将被选中作为某方军队的一员,那么他就不再是自由武将了),换句话说,所谓的自由武将不属于任何一方。

游戏开始,小涵和计算机要从自由武将中挑选武将组成自己的军队,规则如下:小涵先从自由武将中选出一个加入自己的军队,然后计算机也从自由武将中选出一个加入计算机方的军队。接下来一直按照“小涵→ \to计算机→ \to小涵→ … \to\dots”的顺序选择武将,直到所有的武将被双方均分完。然后,程序自动从双方军队中各挑出一对默契值最高的武将组合代表自己的军队进行二对二比武,拥有更高默契值的一对武将组合获胜,表示两军交战,拥有获胜武将组合的一方获胜。

已知计算机一方选择武将的原则是尽量破坏对手下一步将形成的最强组合,它采取的具体策略如下:任何时刻,轮到计算机挑选时,它会尝试将对手军队中的每个武将与当前每个自由武将进行一一配对,找出所有配对中默契值最高的那对武将组合,并将该组合中的自由武将选入自己的军队。 下面举例说明计算机的选将策略,例如,游戏中一共有6 66个武将,他们相互之间的默契值如下表所示:

武将编号123456
15 5528 282816 161629 292927 2727
25 5523 23233 3320 20201 11
328 282823 23238 8832 323226 2626
416 16163 338 8833 333311 1111
529 292920 202032 323233 333312 1212
627 27271 1126 262611 111112 1212

双方选将过程如下所示:

小涵轮到计算机时可选的自由武将计算机计算机选将说明
第一轮5 551 , 2 , 3 , 4 , 6 1,2,3,4,61,2,3,4,64 \color{magenta}44小涵手中的5 55号武将与4 44号的默契值最高,所以计算机选择4 44号。
第二轮5 , 3 5,35,31 , 2 , 6 1,2,61,2,64 , 1 4,\color{magenta}14,1小涵手中的5 55号和3 33号武将与自由武将中配对可产生的最大默契值为29 2929,是由5 55号与1 11号配对产生的,所以计算机选择1 11号。
第三轮5 , 3 , 6 5,3,65,3,62 224 , 1 , 2 4,1,\color{magenta}24,1,2

小涵想知道,如果计算机在一局游戏中始终坚持上面这个策略,那么自己有没有可能必胜?如果有,在所有可能的胜利结局中,自己那对用于比武的武将组合的默契值最大是多少?

假设整个游戏过程中,对战双方任何时候均能看到自由武将队中的武将和对方军队的武将。为了简化问题,保证对于不同的武将组合,其默契值均不相同。

输入格式

N NN行。

第一行为一个偶数N NN,表示武将的个数。

2 22行到第N NN行里,第i + 1 i+1i+1行有N − i N-iNi个非负整数,每两个数之间用一个空格隔开,表示i ii号武将和 $i+1,i+2,\dots,N $ 号武将之间的默契值(0 ≤ 默契值 ≤ 10 9 0 \le \text{默契值} \le 10^90默契值109)。

输出格式

共一或二行。

若对于给定的游戏输入,存在可以让小涵获胜的选将顺序,则输出 $ 1$,并另起一行输出所有获胜的情况中,小涵最终选出的武将组合的最大默契值。如果不存在可以让小涵获胜的选将顺序,则输出0 00

输入输出样例 #1

输入 #1

6 5 28 16 29 27 23 3 20 1 8 32 26 33 11 12

输出 #1

1 32

输入输出样例 #2

输入 #2

8 42 24 10 29 27 12 58 31 8 16 26 80 6 25 3 36 11 5 33 20 17 13 15 77 9 4 50 19

输出 #2

1 77

说明/提示

数据范围

对于 $ 40%$ 的数据有N ≤ 10 N≤10N10

对于 $ 70%$ 的数据有 $ N≤18$。

对于100 % 100\%100%的数据有4 ≤ N ≤ 500 4\le N≤5004N500。保证对于不同的武将组合,其默契值均不相同。

NOIP2010 普及组 第四题

解题思路

本题核心是博弈论结论推导,无需模拟复杂选将过程,直接通过规律求解最优解。根据游戏规则与计算机的破坏策略,可得出关键结论:小涵必定必胜;对于任意一个武将,其默契值最高的搭档一定会被计算机抢走,但第二高的搭档小涵一定能成功选中。因此,我们只需要遍历每一个武将,找到该武将所有默契值中的第二大值,再取所有武将第二大值中的最大值,即为小涵能获得的最优默契值。算法仅需排序与遍历,时间复杂度O ( N 2 log ⁡ N ) O(N^2\log N)O(N2logN),完美适配N ≤ 500 N≤500N500的数据规模。

总结

核心逻辑:利用博弈策略,计算机只能抢走每个武将的最优搭档,小涵保底能拿到次优搭档,取所有次优值的最大值。
关键操作:构建对称默契值矩阵、每行排序取第二大值、全局取最大值。
效率保障:结论式解法,无复杂模拟,简洁高效且100%正确。

代码内容

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll p=1e9+7;constll INF=1e18;constll M=1e6+10;intmain(){ios::sync_with_stdio(false);cin.tie(0);intn;cin>>n;vector<vector<int>>a(n+1,vector<int>(n+1));for(inti=1;i<n;++i)for(intj=i+1;j<=n;++j){cin>>a[i][j];a[j][i]=a[i][j];}intans=0;for(inti=1;i<=n;++i){sort(a[i].begin()+1,a[i].begin()+n+1);ans=max(ans,a[i][n-1]);}cout<<"1\n"<<ans<<'\n';return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 7:46:28

Spring Boot 3.2 实战:5分钟搞定OpenTelemetry + Zipkin链路追踪(附完整代码)

Spring Boot 3.2 极速集成OpenTelemetry链路追踪实战指南 微服务架构下&#xff0c;一个请求往往需要跨越多个服务节点&#xff0c;如何快速定位性能瓶颈和排查问题成为开发者面临的挑战。链路追踪技术应运而生&#xff0c;它像一位细心的侦探&#xff0c;记录请求在分布式系统…

作者头像 李华
网站建设 2026/5/4 7:45:54

视觉语言模型强化学习:PuzzleCraft课程训练实践

1. 项目背景与核心价值视觉语言模型&#xff08;VLM&#xff09;近年来在跨模态理解任务中展现出惊人潜力&#xff0c;但传统监督学习方式存在明显的泛化瓶颈。PuzzleCraft项目创新性地将感知课程学习&#xff08;Curriculum Learning&#xff09;引入强化学习框架&#xff0c;…

作者头像 李华
网站建设 2026/5/4 7:41:06

QMCDecode实用指南:macOS平台QQ音乐加密格式转换操作手册

QMCDecode实用指南&#xff1a;macOS平台QQ音乐加密格式转换操作手册 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#xff0c;默…

作者头像 李华