思路:
将一段两端颜色相同的涂色就相当于给 i ~ j - 1 或 i + 1 ~ j 涂色
不同的就分两段
c o d e code code
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f[1010][1010];
string c;
int main()
{
cin>>c;
int n=c.size();
memset(f, 1, sizeof(f));
for(int i=1; i<=n; i++)
f[i][i]=1;
for(int l=2; l<=n; l++)
{
for(int i=1; i+l-1<=n; i++)
{
int j=i+l-1;
if(c[i-1]==c[j-1])
f[i][j]=min(f[i][j-1], f[i+1][j]);
else
{
for(int k=i+1; k<=j; k++)
f[i][j]=min(f[i][j], f[i][k-1]+f[k][j]);
}
}
}
printf("%d", f[1][n]);
return 0;
}