Poj 1159
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 题意; 5 Ab3bd 加上多少个字符可以是字符串为回文串 #include<iostream> using namespace std; short dp[5005][5005]; char s1[5005],s2[5005]; int fmax( int x, int y) { if (x>y) return x; return y; } int main() { int n; int i,j; while ( scanf ( "%d" ,&n)!=EOF) { scanf ( "%s" ,s1+1); for (i=n;i>=1;i--) s2[i]=s1[n-i+1]; memset (dp,0, sizeof (dp)); for (i=1;i<=n;i++) //s1的标号 for (j=1;j<=n;j++) //s2的标号 { if (s1[i]==s2[j]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=fmax(dp[i-1][j],dp[i][j-1]); } printf ( "%d\n" ,n-dp[n][n]); } return 0; } |