有哪些网站开发技术,濮阳市网站建设公司,做效果图兼职的网站,网页微信版扫描确认登录后无法显示此页正题
题目链接:https://www.luogu.com.cn/problem/P4170 题目大意
给出长度为nnn的串目标串#xff0c;每次可以在一连续的区间覆盖同种字符#xff0c;求最少覆盖次数。 解题思路
我们分情况考虑#xff0c;用fi,jf_{i,j}fi,j表示从i∼ji\sim ji∼j都涂好需要的最少次…正题
题目链接:https://www.luogu.com.cn/problem/P4170 题目大意
给出长度为nnn的串目标串每次可以在一连续的区间覆盖同种字符求最少覆盖次数。 解题思路
我们分情况考虑用fi,jf_{i,j}fi,j表示从i∼ji\sim ji∼j都涂好需要的最少次数
若ijijij那么显然有fi,j1f_{i,j}1fi,j1若i!ji!ji!j且sisjs_is_jsisj那么最开始一段这个覆盖即可所以有fi,jmin{fi1,j,fi,j−1}f_{i,j}min\{f_{i1,j},f_{i,j-1}\}fi,jmin{fi1,j,fi,j−1}若i!ji!ji!j且si!sjs_i!s_jsi!sj那么这两点之间毫无关系我们枚举一个中间点kkk来进行dpdpdpfi,jmin{fi,kfk1,j}f_{i,j}min\{f_{i,k}f_{k1,j}\}fi,jmin{fi,kfk1,j}
然后O(n3)O(n^3)O(n3) codecodecode
#includecstdio
#includecstring
#includealgorithm
using namespace std;
const int N55;
int n,f[N][N];
char s[N];
int main()
{scanf(%s,s1);nstrlen(s1);memset(f,0x3f,sizeof(f));for(int i1;in;i)f[i][i]1;for(int l1;ln;l)for(int i1;iln;i){int jil;if(s[i]s[j])f[i][j]min(f[i][j-1],f[i1][j]);elsefor(int ki;kj;k)f[i][j]min(f[i][j],f[i][k]f[k1][j]);}printf(%d,f[1][n]);
}