传送门

第一题不说了,区间dp

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<string>
 4 #include<cstring>
 5  
 6 using namespace std;
 7  
 8 #define N 1005
 9  
10 int dp[N][N];
11 char s[N];
12 int le;
13  
14 int dfs(int l,int r)
15 {
16     if(dp[l][r] != -1) return dp[l][r];
17     if(l == r) return dp[l][r] = 1;
18     if(l + 1 == r){
19         if(s[l] == s[r] ) return 2;
20         else return 1;
21     }
22     if(l > r) return 0;
23     if(s[l] == s[r]) return dp[l][r] = dfs(l + 1,r - 1) + 2;
24     dp[l][r] = max( dfs(l + 1,r),dfs(l,r - 1) );
25     return dp[l][r];
26 }
27  
28 int main()
29 {
30     while(scanf("%s",s)!=EOF)
31     {
32         le = strlen(s);
33         memset(dp,-1,sizeof(dp));
34         dfs(0,le - 1);
35         printf("%d\n",le - dp[0][le - 1]);
36     }
37     return 0;
38 }
View Code

相关文章: