这代码是没a的,前面的部分应该和bzoj1260思路一样,但是不对,改不动了,哪天再改。
#include<cstdio>
#include<algorithm>
#include<iostream>
#define maxx 1000000007
using namespace std;
char a[107],b[107];
int dp[107],f[107][107];
/*int judge(int x,int y)
{
if(b[x]==b[y])
{
return 0;
}else
{
return 1;
}
}*/
int main()
{
while(~scanf("%s%s",a+1,b+1))
{
int n=strlen(a+1);
memset(f,maxx,sizeof(f));
memset(dp,maxx,sizeof(dp));
for(int i=1;i<=n;i++)
{
f[i][i]=1;
}
for(int p=2;p<=n;p++)
{
for(int i=1;i<=n;i++)
{
int j=i+p-1;
if(j>n)
{
break;
}
if(b[i]==b[j])
{
f[i][j]=min(min(f[i+1][j],f[i][j-1]),f[i+1][j-1]+1);
}
else
{
for(int k=i;k<j;k++)
{
f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]);
}
}
}
}
for(int i=1;i<=n;i++)
{
dp[i]=f[1][i];//dp表示从1到i的最小步数 初始先赋值为空串的
if(a[i]==b[i])dp[i]=min(dp[i-1],dp[i]);
else
{
for(int j=0;j<i;j++)//这里也是一个应用区间dp
{
dp[i]=min(dp[i],dp[j]+f[j+1][i]);
}
}
}
printf("%d\n",dp[n]);
// printf("%d",f[1][n]);
}
return 0;
}