codeforces 1312E

Posted gooooooo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeforces 1312E相关的知识,希望对你有一定的参考价值。

codeforces 1312E

题意

有一个序列 (a_1,a_2,cdots,a_n) 。你可以做如下操作任意次:

  • 选择序列中相邻并且值相等的两个数 (a_i=a_{i+1})
  • (a_i+1) 替换这两个数。

求最后序列的最短长度。

题解

如果我们知道某一区间是否可以通过操作规约为1个数,就可以通过动态规划求出答案。

所以我们需要 (g[i][j]) ,表示 (a_i,a_{i+1},cdots,a_j) 能否通过操作规约成一个数。如果可以,(g[i][j]=)那个数,否则,(g[i][j]=0)

求解 (g) 数组。如果一个长度大于一区间可以规约成一个数,那么这个区间必然可以分成两部分,两个部分可以独立规约为至一个相等的数,而后这两个数规约为一个。因此,我们可以按区间长度由小到大的顺序求出所有 (g[i][j])

(dp[i]) 表示 (a_1,a_2,cdots,a_i) 能得到的最短长度。转移如下:
[ egin{aligned} &jin [1,i] &dp[i] = min(dp[i],dp[j-1] + 1) &g[j][i]>0 &dp[i] = min(dp[i],dp[j-1] + i - j + 1) &g[j][i]=0 end{aligned} ]
(dp[n]) 就是答案。

以上是关于codeforces 1312E的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 1312E. Array Shrinking

Codeforces 1312D. Count the Arrays

Codeforces 1312D - Count the Arrays

Codeforces1312E Array Shrinking 区间DP

Codeforces1312D Count the Arrays 组合数学

CF1312C Adding Powers