题目大意

有 \(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. MySQL☞order by与distinct

    asc(升序,默认值)/desc(降序) 1.根据某一列的列值进行升序或者降序操作. select  列名 别名 from 表名 order by 列名 asc/desc 2.根据多个列值进行排序 s ...

  2. POI HSS 合并重复的列

    import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; i ...

  3. react实现换肤功能

    一.目标   提供几种主题色给用户选择,然后根据用户的选择改变应用的主题色: 二.实现原理   1.准备不同主题色的样式文件:   2.将用户的选择记录在本地缓存中:   3.每次进入应用时,读取缓存 ...

  4. MySQL性能分析和优化-part 1

    MySQL性能优化 平时我们在使用MySQL的时候,怎么评估系统的运行状态,怎么快速定位系统瓶颈,又如何快速解决问题呢? 本文总结了多年来MySQL优化的经验,系统介绍MySQL优化的方法. OS性能 ...

  5. Linux shell 整数运算 let [ ] (( )) expr以及 浮点数 bc用法(转)

    Abstract : 1)  Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算:2)Linux shell 中使用 expr 与 b ...

  6. LeetCode 61——旋转链表

    1. 题目 2. 解答 2.1. 方法一 将链表每个节点向右移动 1 个位置,其实就是让链表最后一个结点指向第一个结点. 因此,向右移动 k 个位置就重复上述过程 k 次即可. 然后,我们注意到,若链 ...

  7. Tensorflow编程基础之Mnist手写识别实验+关于cross_entropy的理解

    好久没有静下心来写点东西了,最近好像又回到了高中时候的状态,休息不好,无法全心学习,恶性循环,现在终于调整的好一点了,听着纯音乐突然非常伤感,那些曾经快乐的大学时光啊,突然又慢慢的一下子出现在了眼前, ...

  8. POJ 2761 Feed the dogs(平衡树or划分树or主席树)

    Description Wind loves pretty dogs very much, and she has n pet dogs. So Jiajia has to feed the dogs ...

  9. 支持ie的时间控件 html

    连接:http://www.my97.net/demo/resource/2.4.asp#m248 下载测试:链接: https://pan.baidu.com/s/17AdRa2OTLPI7ndiA ...

  10. laravel 学习随笔(一)

    1.路由参数:路由参数总是通过花括号进行包裹,参数在路由被执行时会被传递到路由的闭包.(路由参数不能包含“-”字符,如有需要可以用“_”代替):