码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces 1312E

时间:2020-03-18 09:39:37      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:因此   后序   code   顺序   相等   force   通过   选择   math   

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\) 能得到的最短长度。转移如下:
\[ \begin{aligned} &j\in [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

标签:因此   后序   code   顺序   相等   force   通过   选择   math   

原文地址:https://www.cnblogs.com/gooooooo/p/12515296.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!