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

题解:AT_abc436_g [ABC436G] Linear Inequation

本题是一个完全背包问题。设 \(A=\max_{i=1}^nA_i\)

\(f(m)\) 表示 \(\sum_{i=1}^NA_ix_i=m\) 的解数,考虑写出生成函数:

\[F(z)=\prod_{i=1}^N\sum_{k=0}^{+\infty}z^{A_ik}=\prod_{i=1}^N\frac{1}{1-z^{A_i}} \]

\(f(m)=[z^m]F(z)\)

由于 \(F(z)\prod_{i=1}^N(1-z^{A_i})=1\),故 \(f(m)\) 是一个阶数最多为 \(D=\sum_{i=1}^NA_i\le NA\le 10^4\) 的线性递推。答案是 \(\sum_{m=1}^Mf(m)\),从而是一个阶数最多为 \(D+1\) 的线性递推。

通过上面的分析,你当然可以直接把线性递推系数算出来。但是我懒,所以通过完全背包求出前充分多项的值后,直接用 Berlekamp-Massey 算法求线性递推系数即可。

最后使用 Bostan-Mori 或其他算法求解线性递推即可。

时间复杂度 \(O(D^2+D\log D\log M)\),其中 \(D=NA\)

代码:

//By: OIer rui_er
#include <bits/stdc++.h>
#define rep(x, y, z) for(int x = (y); x <= (z); ++x)
#define per(x, y, z) for(int x = (y); x >= (z); --x)
#define debug(format...) fprintf(stderr, format)
#define fileIO(s) do {freopen(s".in", "r", stdin); freopen(s".out", "w", stdout);} while(false)
#define endl '\n'
using namespace std;
typedef long long ll;namespace Polynomial {// 篇幅过长,多项式全家桶省略// 完整代码见 https://atcoder.jp/contests/abc436/submissions/71684486
}using namespace Polynomial;const int K = 105, M = 2e4 + 5;int n, a[K];
ll m;int main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);initPoly(N);cin >> n >> m;rep(i, 1, n) cin >> a[i];Poly<mod, g> F(M);F[0] = 1;rep(i, 1, n) rep(j, a[i], M - 1) F[j] += F[j - a[i]];rep(j, 1, M - 1) F[j] += F[j - 1];if(m < M) cout << F[m] << endl;else {Poly<mod, g> A = berlekamp_massey(F);A.insert(A.begin(), 0);cout << bostan_mori(A, F, m, A.size()) << endl;}return 0;
}
http://www.rkmt.cn/news/108464.html

相关文章:

  • Typst数学排版终极指南:盒子对齐与括号匹配的实用技巧
  • 3、掌握GIMP基础工具,开启创意图形之旅
  • 4、深入探索GIMP:画笔、图案与选区的运用
  • 5、图像变换与色彩处理全攻略
  • 21、畅享数字视听:Linux系统的多媒体及外设应用指南
  • 游戏资源安全防护完整指南:从风险评估到系统化实施
  • 工业大电流测量老出问题?AT4V 新品专治 “不准、不稳、易损坏”
  • Tsuru租户隔离架构深度解析:构建企业级安全PaaS平台
  • 托盘换层提升机保养手册
  • 【linux内核】Page Cache Writeback脏页回写机制
  • 宝塔 Linux 面板 Docker 容器化部署指南
  • 2025年液压数控折弯机厂家权威推荐榜单:对称三辊卷板机 ‌/液压板料折弯机‌/板料折弯机源头厂家精选 - 品牌推荐官
  • Lottie-Android多色渐变动画实战指南
  • Kotaemon深度解析:构建可复现检索增强生成系统的最佳实践
  • 杰理之CIG或BIG连上后安卓手机音量同步功能异常【篇】
  • 如何快速上手Ocrad.js:JavaScript OCR识别的完整指南
  • 算力基建热潮,HDI如何批量“不掉线”
  • 10款高颜值Zsh主题:让你的终端效率翻倍的终极指南
  • 技术面试终极指南:从算法学习到面试成功的完整路径
  • 企业知识库检索难题?Langchain-Chatchat混合检索技术如何实现Top3精准匹配
  • 终极指南:FlutterToast跨平台通知组件完全掌握
  • FreeCAD Python自动化革命:从重复劳动到智能设计的进阶指南
  • 蛋白质AI设计时代的生物安全:筑牢核酸合成的“安检门”
  • 手机强制开启USB调试模式:解锁安卓设备的终极指南
  • COSCon‘25 第十届中国开源年会最全参会指南!
  • 终极指南:如何快速上手Autoware Universe自动驾驶平台
  • 终极指南:WhisperLiveKit 实时语音转录与说话人识别完整教程
  • 聚焦 Rust 生态!COSCon‘25 同场活动 Rust Forward 2025 议程正式发布
  • 【Rust日报】用 Rust 重写的 Turso 是一个更好的 SQLite 吗?
  • 树莓派平台theHarvester开源情报收集系统部署指南