题目大意

有 \(n\) 个物品, 第 \(i\) 个物品的体积为 \(i\)

令 \(f(x)\) 为 选择 \(m\) 个物品, 体积和为 \(x\) 的方案数

令 \(V = \sum_{i=1}^m (n-i+1)\)

求 \(f(1)\cdots f(V)\) 关于 \(w=19190506\) 的 \(hash\) 值

\(1\le m\le n \le 10^{12}\)

subtask 1

考虑递推

\(f[n,m,x]\) 是 \((a_1,\cdots,a_m), a_i\ge 1, \sum a_i = x\) 的划分数量

我们让 \(a_i -= 1\) , 相当于物品大小变为 \([0,n-1]\), 所需体积变成 \(x-m\)

枚举 \(0\) 号物品是否选择

就得到递推式 \(f[n,m,x] = f[n-1,m,x-m] + f[n-1,m-1,x-m]\)

举个例子 (前两行平移了一下) :

f[3,1] =     (0,1,1,1,0,0)
f[3,2] = (0,0,0,1,1,1)
f[4,2] = (0,0,0,1,1,2,1,1)

将第三维 \(hash\) 起来

那么 \(f[n-1,m-1]\) 那边需要补上后面的 \(n-m\) 个空位

而 \(f[n-1,m]\) 那边不需要

于是有 \(f[n,m] = f[n-1,m] + f[n-1][m-1] w^{n-m}\)

subtask 2

搞搞生成函数什么的.

subtask 3

观察本题的递推式, 有 \(\downarrow\), \(\searrow\) 两种移动方式

每列只能用恰好一次 \(\searrow.~~\) 确定好在哪里使用 \(\searrow\) 就可以确定路径

给 \(\searrow\) 标号. 设标号为 \(i\) 的 \(\searrow\) 在第 \(p_i\) 行使用

我们要算的东西是: $$\sum_{1\le p_1\lt p_2\lt \cdots\lt p_m\le n} \frac{\prod_{i=1}^m w{p_i}}{\prod_{i=1}m w^i}$$

考虑如下的变换 :

令 \(p'_i = p_i - \sum_{j<i} [p_j<p_i]\). 可知 \(1\le p'_i \le n-i+1\).

而对于任一一组满足条件的 \(p'\), 每次让 \(p_i\) 选在剩余可选位置中第 \(p'\) 个即可. 构成双射.

记 \(\sigma(p)\) 表示 \(p\) 中的顺序对个数

那么 \(\prod w^{p'_i} = w^{-\sigma(p)} \prod w^{p_i}\)

令 \(S\) 为 \(\sum_{排列(置换)} w^{\sigma}\)

我们对原式做一下变换

\[\begin{aligned}
& \sum_{1\le p_1\lt p_2\lt \cdots\lt p_m\le n\\1\le q_1\lt q_2\lt \cdots \lt q_m \le m}\frac{ \prod w^{p_i} } { \prod w^{q_i} } && 等价形式\\
&= \sum_{p, q} \frac{ w^{\sigma(p)} \prod w^{p_i} } { w^{\sigma(q)} \prod w^{q_i} } && 上下同时乘S, 并将置换作用在p,q上\\
&= \sum_{p', q'} \frac{ \prod w^{p'_i} } { \prod w^{q'_i} }\\
&= \frac{ \prod_{i=1}^m (\sum_{j=1}^{n-i+1} w^j) } { \prod_{i=1}^m (\sum_{j=1}^{m-i+1} w^j)} && 交换计算顺序\\
&= \frac{ \prod_{i=1}^m (\sum_{j=0}^{n-i} w^j) } { \prod_{i=1}^m (\sum_{j=0}^{m-i} w^j)} && 上下同时除w^m \\
&= \frac{ [n]^{\underline m} } { [m]! } && [k] = \frac{q^k-1}{q-1}(等比数列和)\\
&= \frac{ \prod_{i=1}^m (q^{n-i+1}-1) } { \prod_{i=1}^m (q^i-1) }\\
\end{aligned}
\]

其实 \(f[n,m] = {\binom n m}_w\)

关于本题递推式的更多信息可以参考wiki

subtask 4

先回顾 lucas 定理 : \(\binom n m \equiv \binom {\lfloor \frac n p\rfloor}{\lfloor \frac m p\rfloor} \binom {n\bmod p}{m\bmod p} \pmod p\)

证明 :

\(n!\bmod p = (\prod_{i=1}^{\lfloor \frac n p\rfloor} ip)~(\prod_{i=1}^{p-1})^{\lfloor \frac n p \rfloor}~(\prod_{i=1}^{n\bmod p} i)\)

也即分成三个部分, 整除部分, 整块部分, 剩余部分

只有第一部分有 \(p\). 它可以写成 \(p^{\lfloor \frac n p \rfloor} \lfloor \frac n p \rfloor !\)

(1) \(\lfloor \frac {n-m} p \rfloor + \lfloor \frac m p \rfloor < \lfloor \frac n p \rfloor\)

此时幂部分 \(p\) 有剩余, 阶乘部分剩余为整数, 无法将 \(p\) 抵消. 值为 \(0\)

对应的, 在lucas定理中, \(n\bmod p + m\bmod p > p\), 使得组合数值为 \(0\)

(2) \(\lfloor \frac {n-m} p \rfloor + \lfloor \frac m p \rfloor = \lfloor \frac n p \rfloor\)

此时原式中的第一部分剩下的是组合数, 第二部分抵消, 第三部分不变.

这样不用生成函数来证明, 更容易推广一些

推广到这一题:

考虑令 \(w^a-1\equiv 0\) 的最小的 \(a\)

记 \(fac[n] = \prod_{i=1}^n (q^i-1)\)

那么 \(fac[n] = (\prod_{i=1}^{\lfloor \frac n a \rfloor}q^{ai}-1)~(\prod_{i=1}^{n-1} q^i-1)^{\lfloor \frac n a \rfloor}~(\prod_{i=1}^{n\bmod a} q^i-1)\)

因式分解 \(q^{ai}-1 = (q^a-1)(\sum_{k=0}^{i-1}q^{ak}) = i(q^a-1)\)

因此 $fac[n] = (qa-1){\lfloor \frac n p \rfloor} \lfloor \frac n p \rfloor! \(
剩下的推导就同理了, 最终得到:
\){\binom n m}_w = \binom {\lfloor \frac n a \rfloor}{\lfloor \frac m a \rfloor} {\binom {n\bmod a}{m\bmod a}}_w$

LOJ tangjz的背包的更多相关文章

  1. LOJ #6089. 小 Y 的背包计数问题

    LOJ #6089. 小 Y 的背包计数问题 神仙题啊orz. 首先把数分成\(<=\sqrt n\)的和\(>\sqrt n\)的两部分. \(>\sqrt n\)的部分因为最多选 ...

  2. loj 6089 小 Y 的背包计数问题——分类进行的背包

    题目:https://loj.ac/problem/6089 直接多重背包,加上分剩余类的前缀和还是n^2的. 但可发现当体积>sqrt(n)时,个数的限制形同虚设,且最多有sqrt(n)个物品 ...

  3. 2019.01.13 loj#6515. 贪玩蓝月(线段树分治+01背包)

    传送门 题意简述:有一个初始为空的双端队列,每次可以在队首和队尾插入或弹出一个二元组(wi,vi)(w_i,v_i)(wi​,vi​),支持询问从当前队列中选取若干个元素是的他们的和对 MODMODM ...

  4. LOJ#2552. 「CTSC2018」假面(期望 背包)

    题意 题目链接 Sol 多年以后,我终于把这题的暴力打出来了qwq 好感动啊.. 刚开始的时候想的是: 设\(f[i][j]\)表示第\(i\)轮, 第\(j\)个人血量的期望值 转移的时候若要淦这个 ...

  5. LOJ 6089 小Y的背包计数问题 —— 前缀和优化DP

    题目:https://loj.ac/problem/6089 对于 i <= √n ,设 f[i][j] 表示前 i 种,体积为 j 的方案数,那么 f[i][j] = ∑(1 <= k ...

  6. loj #6039 「雅礼集训 2017 Day5」珠宝 分组背包 决策单调性优化

    LINK:珠宝 去年在某个oj上写过这道题 当时懵懂无知wa的不省人事 终于发现这个东西原来是有决策单调性的. 可以发现是一个01背包 但是过不了 冷静分析 01背包的复杂度有下界 如果过不了说明必然 ...

  7. LOJ#6089 小 Y 的背包计数问题 - DP精题

    题面 题解 (本篇文章深度剖析,若想尽快做出题的看官可以参考知名博主某C202044zxy的这篇题解:https://blog.csdn.net/C202044zxy/article/details/ ...

  8. 【LOJ】#2523. 「HAOI2018」奇怪的背包

    题解 复杂度怎么算也要2s的题怎么0.5s就跑完了,迷啊 这个题简直算完复杂度不敢写,写了就赚飞了好吧 根据裴蜀定理,显然选出的数和P的gcd是w的约数 我们考虑枚举\(P\)的约数,上限当然是\(\ ...

  9. 【题解】【LibreOJ Round #6】花团 LOJ 534 时间线段树分治 背包

    Prelude 题目链接:萌萌哒传送门(/≧▽≦)/ Solution 如果完全离线的话,可以直接用时间线段树分治来做,复杂度\(O(qv \log q)\). 现在在线了怎么办呢? 这其实是个假在线 ...

随机推荐

  1. Android OpenStreetMap(OSM) 使用 osmbonuspack 进行导航

    关于OpenStreetMap的介绍,国内还是很少,csdn上面有一篇,写的不错,我也就不再做重复的事情了. 这里贴出链接地址:http://blog.csdn.net/mad1989/article ...

  2. 11-Mysql数据库----单表查询

    本节重点: 单表查询 语法: 一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field ...

  3. Leetcode 3. Longest Substring Without Repeating Characters (Medium)

    Description Given a string, find the length of the longest substring without repeating characters. E ...

  4. 平衡二叉树(AVL Tree)

    在学习算法的过程中,二叉平衡树是一定会碰到的,这篇博文尽可能简明易懂的介绍下二叉树的相关概念,然后着重讲下什么事平衡二叉树. (由于作图的时候忽略了箭头的问题,正常的树一般没有箭头,虽然不影响描述的过 ...

  5. JAVA的文件操作【转】

    11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程 ...

  6. nodeJs 调试异步程序追踪异步报错

    DeprecationWarning: Calling an asynchronous function without callback is deprecated. 翻译: 不建议在不回调的情况下 ...

  7. UVA 11884 A Shooting Game(记忆化搜索)

    A and B are playing a shooting game on a battlefield consisting of square-shaped unit blocks. The bl ...

  8. UGUI 代码 动态添加 Event Trigger 的事件

    Additionally, if you need more than just the events provided by default, I'd suggest instead attachi ...

  9. 【转】webpack4

    1.不再支持node.js4.X 2.不能用webpack命令直接打包指定的文件,只能使用webpack.config.js进行配置. 即:webpack  demo01.js  bundle01.j ...

  10. php实现base64图片上传方式实例代码

    <?php /** * base64图片上传 * @param $base64_img * @return array */ header("content-type:text/htm ...