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

OIFC 2025.11.25 模拟赛总结

生日当天还有模拟赛(

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;
}
http://www.jsqmd.com/news/50558/

相关文章:

  • 实验三.类和对象
  • 企业微信会话内容存档功能测试,能获取成员或客户以及群消息内容,通过拉取可以将消息备份到自己服务器
  • 桂林高中一对一辅导机构权威榜单:2025阳朔、龙胜等地区辅导机构综合实力榜
  • T701793 网络延迟 (latency) 赛后题解
  • RoadRunner与其他PHP服务器相比之优势 - 详解
  • Sentaurus .tdr文件导出数据,重新画图
  • 桂林一对一家教辅导实用测评:2025秀峰、象山等地区辅导机构全维度对比
  • MATLAB锂离子电池伪二维(P2D)模型实现
  • 2025年纺织机械润滑油定做厂家权威推荐榜单:汽车制造润滑油/工业润滑油/原厂防冻液源头厂家精选
  • EasyExcel按模板导出excel
  • C# Autofac学习笔记【转载】
  • 2025年市场有实力的清障车公司口碑推荐榜,蓝牌重载清障车/清障车带吊/黄牌清障车/重载清障车/拖吊联体清障车清障车公司口碑推荐榜
  • 2025下半年广东东莞套管、绝缘套管、热收缩套管、热缩套管、热缩管源头生产厂家选购终极指南:五大优质厂商深度解析
  • 2025年钢管表面喷涂处理生产商权威推荐榜单:高效自动喷油设备/全自动喷油生产线/普压自动喷油机源头厂家精选
  • 墨西哥旺季物流压力大:售后客服如何做好主动通知?
  • 【数字逻辑】24进制LED综合控制实战!10灯精准执行(74HC161+138+139完整方案) - 指南
  • 微算法科技(NASDAQ :MLGO)利用燃烧证明POB共识机制提高区块链网络安全性
  • 澳洲线路绕路多成本高:如何选择高质量语音供应商?
  • [完结10章]n8n+AI工作流:从入门到企业级AI应用实战
  • 2025澳洲留学中介机构排行
  • MacOS 本地部署 Ollama
  • iOS Universal Link 配置
  • matlab实现图像纹理特征提取
  • LLaMA-Factory 微调模型一
  • 洛谷题单指南-组合数学与计数-P3223 [HNOI2012] 排队
  • 102302138 林楚涵 作业三
  • 西安一对一家教辅导实用测评:2025阎良、临潼等地区辅导机构全维度对比
  • 桂林小学一对一补习机构终极评测:2025七星、雁山等地区热门辅导机构真实评测
  • rust语言枚举类型enum与模式匹配
  • 11.22 NOIP 模拟赛 T1. 破乱的诗歌