生成字符串

来源:互联网 发布:nginx 配置指定目录 编辑:程序博客网 时间:2024/06/11 01:05

从空串出发,每次在字符串中间插入一个或多个相同的字母,插入的字母可以在头部和尾部。求出最少的次数。

动态规划,逆向进行,考虑首尾。

#include<cstdio>#include<cstring>#include<string.h>#include<algorithm>#include<iostream>#include<math.h>#include<vector>#include<stack>using namespace std;const int maxn=210;char s[maxn];int f[maxn][maxn];int tc;int i,j,k;int main(){scanf("%d",&tc);while(tc--){scanf("%s",s);int l=strlen(s);int ll;for(int i=0;i<l;i++)f[i][i]=1;for(ll=1;ll<l;ll++){for(int i=0;i+ll<l;i++){j=i+ll;if(s[i]==s[j]){f[i][j]=f[i][j-1];}else{f[i][j]=j-i+1;for(k=i+1;k<=j;k++){if(f[i][j]>f[i][k-1]+f[k][j])f[i][j]=f[i][k-1]+f[k][j];}}}}printf("%d\n",f[0][l-1]);}return 0;}
from sysuoj.

原创粉丝点击