链接
题意
给你一个长度为\(\text{N}\)的由小写字母组成的字符串\(s\),你需要对它进行删除操作,你每次可以删除一个连续的、只含一种字母的子串,现在问你最少需要多少次可以把它含有的字符全部删除掉。 数据范围:\(1\leq \text{N} \leq 500\).
分析
这是一道区间\(dp\)的题目;
首先\(dp[i][j]\)表示把\([i,\ j]\)的字符全部删除需要进行的最少操作次数,正常情况下,我们需要枚举区间长度、起点及终点;对于一个区间\([l,r]\),,如果\(s[l]==s[r]\),那么\(dp[l][r]\),一定等于\(dp[l+1][r]\)、\(dp[l][r-1]\)二者中较小者,如果\(s[l]!=s[r]\),我们就需要枚举划分点作为转移决策,有转移方程:\(dp[i][j]=\displaystyle \min_{i\leq k < j}\{dp[i][k]+dp[k+1][j]\}\)。 对于\(dp[i][j]\)的初值应该初始化为\(i-j+1\)。
代码
1 |
|