尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

OIFC 2025.11.25 模拟赛总结

OIFC 2025.11.25 模拟赛总结
📅 发布时间:2026/6/20 3:51:32

生日当天还有模拟赛(

T1 Pocky游戏

题意简述

Mdk 和 Hmr 正在吃 Pocky,她们感到有些无聊,于是决定玩一个小游戏。

现在有一根长度为 \(n\) 的 Pocky,其中从左往右数第 \(i\) 单位长度 Pocky 的美味值为 \(a_i\)。现在 Mdk 和 Hmr 决定吃掉这根 Pocky,Mdk 从左往右吃,Hmr 从右往左吃。

  • Mdk 先开始吃,她会从左侧吃 \(1\) 或 \(2\) 单位长度的 Pocky。

  • 接下来,如果上一个人吃了 \(k\) 单位的 Pocky,则下一个人可以吃 \(k\) 或 \(k + 1\)(如果剩余长度 \(\geq k + 1\))单位的 Pocky。

  • 如果剩下的 Pocky 长度小于 \(k\),则这个游戏将会停止。

双方都想要最大化自己吃掉的 Pocky 的美味值减掉对方吃掉的 Pocky 的美味值,问在双方都使用最优策略的情况下,Mdk 吃掉的 Pocky 的美味值减去 Hmr 吃掉的 Pocky 的美味值将会是多少?

数据范围:\(1 \leq n \leq 4000, |a_i| \leq 10^4\)。空间限制:\(256 MB\)。

题解

类似博弈论,所以可以直接写 dfs 求解。

具体地,我们令 \(f_{l, r, k}\) 表示两个人分别到了 \(l, r\),且上一个人走到了 \(k\),会得到的结果。转移方程与博弈论模型类似,是 \(\max\) 里面套两个 \(\min\)。

这样做,转移是 \(\mathcal{O}(1)\) 的,但状态是 \(\mathcal{O}(n^3)\) 的,需要优化。

注意到 \(k\) 不会很大,因为很快就取完了。具体地,需要满足 \(\frac{k(k + 1)}{2} \leq n\),因此 \(k\) 这一维开到 \(90\) 即可。

另一方面,两个人轮流取数,所以差不会太大。由于每次取 \(k\) 或 \(k + 1\),所以一个回合最多差 \(1\),即总共不会差超过 \(\sqrt{n}\)。

这样,状态就优化成 \(n \cdot \sqrt{n} \cdot \sqrt{n}\) 了,可以通过。

参考代码(记搜版):

#include<bits/stdc++.h>
//#define int long long
using namespace std;
inline int read(){int x = 0, f = 1;char ch = getchar();while(!isdigit(ch)){if(ch == '-') f = -1;ch = getchar();}while(isdigit(ch)){x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}return x * f;
}
inline void write(int x){if(x < 0) putchar('-'), x = -x;if(x > 9) write(x / 10);putchar(x % 10 + '0');return;
}
const int _ = 0;
int n, s[4005], val[4005][90][90][2];
bool vis[4005][90][90][2];
inline int dfs(int l, int r, int k, int p){if(vis[l][r - l + 1][k][p]) return val[l][r - l + 1][k][p];int res = ~(0^_^0);if(p == 0)if(r - l + 1 < k)res = 0;else if(r - l + 1 >= k + 1)res = max(dfs(l + k, r, k, 1) + s[l + k - 1] - s[l - 1], dfs(l + k + 1, r, k + 1, 1) + s[l + k] - s[l - 1]);elseres = dfs(l + k, r, k, 1) + s[l + k - 1] - s[l - 1];elseif(r - l + 1 < k)res = 0;else if(r - l + 1 >= k + 1)res = min(dfs(l, r - k, k, 0) - s[r] + s[r - k], dfs(l, r - (k + 1), k + 1, 0) - s[r] + s[r - (k + 1)]);elseres = dfs(l, r - k, k, 0) - s[r] + s[r - k];vis[l][r - l + 1][k][p] = true;return val[l][r - l + 1][k][p] = res;
}
signed main(){freopen("game.in", "r", stdin);freopen("game.out", "w", stdout);n = read();for(int i = 1; i <= n; i++) s[i] = s[i - 1] + read();write(dfs(1, n, 1, 0));return 0;
}

相关新闻

  • T701793 网络延迟 (latency) 赛后题解
  • RoadRunner与其他PHP服务器相比之优势 - 详解
  • 桂林一对一家教辅导实用测评:2025秀峰、象山等地区辅导机构全维度对比

最新新闻

  • S12S BDM硬件握手协议:ACK脉冲原理与嵌入式调试实战
  • 前向车辆最小转弯约束下的两点间最短路径生成工具(MATLAB实现+图形可视化)
  • 2026年即时零售无人仓加盟推荐:无人外卖仓/外卖闪电仓/前置仓无人仓/即时零售运营加盟全解析 - 海棠依旧大
  • 2026年东莞全域保洁服务公司推荐:开荒清洁/外墙清洗/石材养护/甲醛治理/油烟管道清洁/日常驻场保洁 - 海棠依旧大
  • CVE-2025-55182本地复现:路径遍历漏洞原理与实战利用详解
  • 麻省理工研究人员打造 Fractal 操作系统,获苹果 M1 芯片新发现

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号