欢迎光临散文网 会员登陆 & 注册

CF竞赛题目讲解_CF1132F(区间DP)

2022-08-19 10:41 作者:Clayton_Zhou  | 我要投稿

https://codeforces.com/contest/1132/problem/F

题意:


给你一个串 s,每次可以花费 1 的代价删去一个子串,要求子串的每一位为同一个字符。

例如abcddcba中的"dd"

求删去整个串的最小代价。1≤|s|≤500


思路:


子状态为dp[i][j]表示消除区间[i,j]内所有字母所需的最小步数。


考虑两种转移。

1. 与上一个状态相比,假设新的字母不能缩短步数,那么代价直接加1。

dp[i][j]=min(dp[i+1][j],dp[i][j−1])+1。


2. 可以缩短步数。那么枚举与哪一个字母相同。

如果c[i]==c[k],则dp[i][j]=min(dp[i][j],dp[i+1][k−1]+dp[k][j])。


在维护上有一个需要注意的细节:因为第一种转移需要dp[i+1][j]和dp[i][j−1]的数据,所以我们需要先枚举j再枚举i,同时i从大到小枚举。


CF竞赛题目讲解_CF1132F(区间DP)的评论 (共 条)

分享到微博请遵守国家法律