1. 程式人生 > 其它 >poj1159題解(動態規劃)

poj1159題解(動態規劃)

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; }