poj1159題解(動態規劃)
阿新 • • 發佈:2021-01-29
1.套用最長公共子序列的模板就行。
模板公式:
#include<stdio.h>
#include<string.h>
char a[5005];
short l[5005][5005];
char b[5005];
int max1(int a, int b)
{
if(a>b)
{
return a;
}
else
return b;
//return MAx;
}
int main()
{
int n;
while(scanf("%d",&n)==1)
{
scanf("%s",&a);
for(int i=n-1,j=0; i>=0; i--,j++)
{
b[j]=a[i];
}
//printf("a=%s\n",a);
//printf("b=%s\n",b);
for(int i=0; i<=n; i++)
{
l[0][i]=0;
l[i][0]=0;
}
for (int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
if(a[i]==b[j])
{
l[i+1][j+1]=l[i][j]+1;
}
else
{
l[i+1][j+1]=max1(l[i][j+1],l[i+1][j]);
}
}
}
printf("%d\n",n-l[n][n]);
}
return 0;
}