Codeforces1548 C. The Three Little Pigs(组合数学+dp)

Posted live4m

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces1548 C. The Three Little Pigs(组合数学+dp)相关的知识,希望对你有一定的参考价值。

题意:

解法:

对 于 给 定 的 x , a n s = ∑ i = 0 n C 3 i x C ( n , m ) 可 以 预 处 理 逆 元 然 后 O ( 1 ) 算 . 对 于 单 个 x , 累 加 C ( 3 i , x ) 可 以 O ( n ) 计 算 答 案 . 但 是 这 题 是 多 组 数 据 , 需 要 优 化 . 考 虑 不 同 的 x 之 间 是 否 存 在 递 推 关 系 . 即 考 虑 利 用 x = t 的 答 案 推 出 x = t + 1 的 答 案 . − − − − − 已 知 ∑ i = 0 n C 3 i x , 要 推 出 ∑ i = 0 n C 3 i x + 1 令 d [ x ] [ j = 0 / 1 / 2 ] 表 示 ∑ i = 0 n C 3 i + j x 那 么 有 式 子 : 1. d [ x + 1 ] [ 1 ] = d [ x + 1 ] [ 0 ] + d [ x ] [ 0 ] 2. d [ x + 1 ] [ 2 ] = d [ x + 1 ] [ 1 ] + d [ x ] [ 1 ] 3. d [ x + 1 ] [ 0 ] + d [ x + 1 ] [ 1 ] + d [ x + 1 ] [ 2 ] = C 3 n + 3 x + 2 式 子 解 释 : 1 和 2 : d [ x + 1 ] [ 1 ] = ∑ i = 0 n C 3 i + 1 x + 1 = ∑ i = 0 n [ C 3 i x + 1 + C 3 i x ] = ∑ i = 0 n C 3 i x + 1 + ∑ i = 0 n C 3 i x = d [ x + 1 ] [ 0 ] + d [ x ] [ 0 ] d [ x + 1 ] [ 2 ] 同 理 . 3 : d [ x + 1 ] [ 0 ] + d [ x + 1 ] [ 1 ] + d [ x + 1 ] [ 2 ] = ∑ i = 0 n [ C 3 i x + 1 + C 3 i + 1 x + 1 + C 3 i + 2 x + 1 ] = ∑ i = 0 3 n + 2 C i x + 1 = C 3 n + 3 x + 2 那 么 d [ x + 1 ] [ 0 ] = C 3 n + 3 x + 2 − d [ x + 1 ] [ 1 ] − d [ x + 1 ] [ 2 ] 三 个 变 量 三 个 式 子 , 可 以 推 出 转 移 方 程 : 1. d [ x + 1 ] [ 0 ] = ( C 3 ∗ n + 3 x + 2 − 2 d [ x ] [ 0 ] − d [ x ] [ 1 ] ) / 3 2. d [ x + 1 ] [ 1 ] = d [ x + 1 ] [ 0 ] + d [ x ] [ 0 ] 3. d [ x + 1 ] [ 2 ] = d [ x + 1 ] [ 1 ] + d [ x ] [ 1 ] 边 界 : d [ 0 ] [ 0 ] = d [ 0 ] [ 1 ] = d [ 0 ] [ 1 ] = n + 1 答 案 : 对 于 给 定 的 x , d [ x ] [ 0 ] 就 是 答 案 . 对于给定的x,ans=\\sum_{i=0}^nC_{3i}^x\\\\ C(n,m)可以预处理逆元然后O(1)算.\\\\ 对于单个x,累加C(3i,x)可以O(n)计算答案.\\\\ 但是这题是多组数据,需要优化.\\\\ 考虑不同的x之间是否存在递推关系.\\\\ 即考虑利用x=t的答案推出x=t+1的答案.\\\\ -----\\\\ 已知\\sum_{i=0}^nC_{3i}^x,要推出\\sum_{i=0}^nC_{3i}^{x+1}\\\\ 令d[x][j=0/1/2]表示\\sum_{i=0}^nC_{3i+j}^x\\\\ 那么有式子:\\\\ 1.d[x+1][1]=d[x+1][0]+d[x][0]\\\\ 2.d[x+1][2]=d[x+1][1]+d[x][1]\\\\ 3.d[x+1][0]+d[x+1][1]+d[x+1][2]=C_{3n+3}^{x+2}\\\\ 式子解释:\\\\ 1和2:\\\\ d[x+1][1]=\\sum_{i=0}^nC_{3i+1}^{x+1}\\\\ =\\sum_{i=0}^n[C_{3i}^{x+1}+C_{3i}^{x}]\\\\ =\\sum_{i=0}^nC_{3i}^{x+1}+\\sum_{i=0}^nC_{3i}^x\\\\ =d[x+1][0]+d[x][0]\\\\ d[x+1][2]同理.\\\\ 3:\\\\ d[x+1][0]+d[x+1][1]+d[x+1][2]\\\\ =\\sum_{i=0}^n[C_{3i}^{x+1}+C_{3i+1}^{x+1}+C_{3i+2}^{x+1}]\\\\ =\\sum_{i=0}^{3n+2}C_{i}^{x+1}=C_{3n+3}^{x+2}\\\\ 那么d[x+1][0]=C_{3n+3}^{x+2}-d[x+1][1]-d[x+1][2]\\\\ 三个变量三个式子,可以推出转移方程:\\\\ 1.d[x+1][0]=(C_{3*n+3}^{x+2}-2d[x][0]-d[x][1])/3\\\\ 2.d[x+1][1]=d[x+1][0]+d[x][0]\\\\ 3.d[x+1][2]=d[x+1][1]+d[x][1]\\\\ 边界:\\\\ d[0][0]=d[0][1]=d[0][1]=n+1\\\\ 答案:\\\\ 对于给定的x,d[x][0]就是答案. x,ans=i=0nC3ixC(n,m)O(1).x,C(3i,x)O(n).,.x.x=tx=t+1.i=0nC3ix,i=0nC3ix+1d[x][j=0/1/2]i=0nC3i+jx:1.d[x+1][1]=d[x+1][0]+d[x][0]2.d[x+1][2]=d[x+1][1]+d[x][1]3.d[x+1][0]+d[x+1][1]+d[x+1][2]=C3n+3x+2:12:d[x+1][1]=i=0nC3i+1x+1=i=0n[C3ix+1+C3ix]=i=0nC3ix+1+i=0nC3ix=d[x+1][0]+d[x][0]d[x+1][2].3:d[x+1][0]+d[xEducational Codeforces Round 5 - C. The Labyrinth (dfs联通块操作)

Educational Codeforces Round 75 (Rated for Div. 2) C. Minimize The Integer

Codeforces Round #439 C. The Intriguing Obsession

Codeforces Round #586 (Div. 1 + Div. 2) C. Substring Game in the Lesson

Codeforces Round #426 (Div. 2) C. The Meaningless Game (二分 or pow函数)

Codeforces Round #426 (Div. 2)C. The Meaningless Game