Pass to Next
题解
做过一遍的题再做一遍有不会了。
首先,我们发现,如果每个人都至少传了一个球,那么我们得到的最终的序列就会与去掉它们都串的球的最小值后的序列相同。
所以我们的答案可以用所有方案 − - −至少传一个球的方案得出,显然,总共有 ∏ ( a i + 1 ) − ∏ a i \prod(a_{i}+1)-\prod a_{i} ∏(ai+1)−∏ai种方案,但我们要求的答案是 ∑ ∏ x i \sum \prod x_{i} ∑∏xi,这东西要怎么求呢?
考虑将这个乘积的式子用组合意义的方法转换一下, ∏ x i \prod x_{i} ∏xi显然就是就是让每个人从自己的球中选出一个的方案数,所以我们需要求出所有传球方案的选球方案数。
上面的问题显然可以考虑用 d p dp dp求出,我们定义 d p i , 0 / 1 dp_{i,0/1} dpi,0/1,考虑第 i i i个人,第 i i i个人在前一个人/他自己的球中选择球的方案数。
显然我们的转移应该是有两个部分内的,一个是他往后传球的部分,他选自己的球的部分。
如果他要在前面一个人的球中选球,那就应该在从 d p i − 1 − > d p i dp_{i-1}->dp_{i} dpi−1−>dpi时处理好他的方案。
如果他要在自己的球中选球,那就应该在从 d p i − > d p i + 1 dp_{i}->dp_{i+1} dpi−>dpi+1时处理好他的方案。
因为这两中选球的不同涉及到他或者他前面的人的传球方案。
转移应该还是比较好想的,主要就是枚举一下 d p i dp_{i} dpi与 d p i + 1 dp_{i+1} dpi+1的 0 / 1 0/1 0/1状态,总共四种转移。
下面以没有现在的方案为例,
- d p i , 0 − > d p i + 1 , 0 dp_{i,0}->dp_{i+1,0} dpi,0−>dpi+1,0,显然我们此时需要考虑两个要素, i i i在自己这里选的方案与 i i i