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

[题解]P11126 [ROIR 2024] 三等分的数组 (Day 2)

P11126 [ROIR 2024] 三等分的数组 (Day 2)

考虑到数的选取与输入顺序无关,我们将数丢到桶里,记 \(c_x\)\(x\) 出现的次数。

那么我们取出三元组的过程可以描述为下面二者之一:

  • 选取 \(c\) 中的一个位置,将其减去 \(3\)
  • 选取 \(c\) 中连续的三个位置,将其减去 \(1\)

\(f[x][i][j]\) 表示当前考虑到 \(c\) 中的第 \(x\) 位,第 \(x\) 位消去了 \(i\) 个,第 \(x-1\) 位消去了 \(j\) 个,\(x-2\) 及之前的位置全部消去的答案。

这样设状态是可以正确转移的,因为能消除第 \(x-2\) 位的最大位置就是 \(x\),如果留到 \(x\) 之后就永远消不掉了。

我们可以枚举使用 \((x,x,x)\) 的次数 \(t\),则剩下的 \((i-3t)\) 必须全部用于使用 \((x-2,x-1,x)\),则有转移:

\[f[x][i][j]=\sum\limits_{t=0}^{\lfloor\frac{x}{3}\rfloor} f[x-1][j-(i-3t)][c_{x-2}-(i-3t)] \]

酱紫会 T,考虑优化。

我们发现(可以归纳理解):

\[\begin{aligned} &\quad\sum\limits_{t=0}^{\lfloor\frac{x}{3}\rfloor} f[x-1][j-(i-3t)][c_{x-2}-(i-3t)]\\ &=f[x][i-3][j]+f[x][j-i][c_{x-2}-i]\\ \end{aligned} \]

所以不需要枚举 \(t\),状态转移优化到 \(O(1)\)

考虑分析这样做的时间复杂度。

对于 \(f[x][i][j]\)\(i,j\) 的上界是 \(c_x,c_{x-1}\),所以总状态数是:

\[\sum\limits_{i=1}^m c_i c_{i-1} \]

状态数是 $O(m^2)$ 的

\[\begin{aligned} &\quad\sum\limits_{i=1}^m c_i c_{i-1}\\ &\le \sum\limits_{i=1}^m c_i^2&(\text{排序不等式})\\ &\le m^2 \end{aligned} \]

状态数是 $O(n^2)$ 的

我们将 \(c\) 按下标的奇偶性两两分组:

\[A=c_1+c_3+c_5+\dots\\ B=c_2+c_4+c_6+\dots \]

展开 \(A\times B\) 可知:

\[\sum\limits_{i=1}^m c_i c_{i-1}\le A\times B \]

\(A+B=n\),据均值不等式知 \(A\times B\le \frac{n^2}{4}\)

所以原式是 \(O(n^2)\) 的。

所以时间复杂度是 \(O(m\times \min(n^2,m^2))\),而且跑不满。

只是空间需要注意滚动数组。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=5e3+5,M=5e3+5,P=1e9+7;
int n,m,c[M],f[2][N][N];
signed main(){cin>>n>>m;m+=2;for(int i=1,x;i<=n;i++) cin>>x,x+=2,c[x]++;f[0][0][0]=1;for(int x=3,cur=1;x<=m;x++,cur^=1){for(int i=0;i<=c[x];i++){for(int j=0;j<=c[x-1];j++){if(i>=3) f[cur][i][j]=f[cur][i-3][j];else f[cur][i][j]=0;if(c[x-2]>=i&&j>=i) (f[cur][i][j]+=f[cur^1][j-i][c[x-2]-i])%=P;}}}cout<<f[m&1][c[m]][c[m-1]]<<"\n";return 0;
}
http://www.zskr.cn/news/27697.html

相关文章:

  • 1111111111111
  • 数据库学习篇(持续更新中)
  • Fortinet产品安全漏洞分析:FGFM协议未经认证连接重置漏洞
  • Yolo11分割模型
  • 这是一个测试文档
  • 智联笔记项目——251022登录注册、后端管理及内容类型处理优化
  • 2025.10.22博客
  • 完整教程:基于WebAssembly的STEP文件3D在线查看器实现详解
  • 实用指南:86-python电网可视化项目-6
  • 通过电脑调试 Android/iOS 手机端网页
  • CMS垃圾回收器详解
  • 实用指南:生活琐记(3)
  • 设计模式-建造者模式 - 实践
  • 实用指南:C++设计模式_创建型模式_原型模式Prototype
  • 第二十一篇
  • [MS-DOS]MS-DOS 6.22 with CD-ROM Driver.ver.6.22.English下载与安装
  • 2025 年国内品牌设计公司最新推荐排行榜:聚焦行业领军者优势,精选优质服务商深度解析
  • 087_尚硅谷_switch使用细节(1)
  • 2025 年感温电缆厂家最新推荐权威榜单重磅发布,全方位解析头部品牌优势助力工业消防精准选型
  • 完整教程:2- 十大排序算法(希尔排序、计数排序、桶排序)
  • Windows Server 2025 安装IIS服务
  • 今日开启!飞书 燕千云年终钜惠活动来袭
  • CF1842G Tenzing and Random Operations 题解
  • 广州治疗青少年心理医院口碑榜:TOP3医疗机构专业实力深度解析
  • 详细介绍:高通平台WiFi学习-- WLAN 固件在modem中加载过程和调试方法
  • 人狗大战Ⅱ
  • 【IEEE出版、往届会后3个月检索】2025 第九届控制工程与先进算法国际论坛(IWCEAA 2025)
  • 整装定制家具生产厂家口碑榜:TOP3企业智能制造实力深度解析
  • 高性能超低功耗蓝牙电子价签方案 OM6626 NRF52832
  • 软工第三次作业-结对项目