题目链接:https://vjudge.net/problem/HYSBZ-1260
题意:求把一个空串涂成目标串的最小操作数。
思路:如果一个串的两个端点相同,就可以进行状态转移。 注意区间枚举的方式。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
char s1[105],s2[105];
int dp[105][105],ans[105];
int main()
{
scanf("%s",s1);
int len=strlen(s1);
for(int i=0; i<len; i++)
{
for(int j=i; j>=0; j--)
{
dp[j][i]=dp[j+1][i]+1;//最坏情况下所需操作数
for(int k=j+1; k<=i; k++)//枚举串的分割点
{
if(s1[j]==s1[k])
{
dp[j][i]=min(dp[j+1][k]+dp[k+1][i],dp[j][i]);
}
}
}
}
printf("%d\n",dp[0][len-1]);
return 0;
}