码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1513 Palindrome

时间:2014-07-31 12:24:36      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   art   

题目就是给一个字符串问最少插入多少个字符能让原字符串变为回文字符串。

算法:

用原串的长度减去原串与翻转后的串的最大公共字串的长度,就是所求答案。

 

bubuko.com,布布扣
 1 //#define LOCAL
 2 #include <iostream>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <cstring>
 6 using namespace std;
 7 
 8 const int maxn = 5000 + 5;
 9 char s1[maxn], s2[maxn];
10 int dp[2][maxn];
11 
12 void Reverse(char str[], int len)
13 {
14     int i, t;
15     for(i = 0; i < len/2; ++i)
16     {
17         t = str[i];
18         str[i] = str[len - 1 - i];
19         str[len - 1 - i] = t;
20     }
21 }
22 
23 int main(void)
24 {
25     #ifdef LOCAL
26         freopen("1513in.txt", "r", stdin);
27     #endif
28     int len;
29     while(scanf("%d", &len) == 1)
30     {
31         scanf("%s", s1);
32         memcpy(s2, s1, sizeof(s1));
33         Reverse(s2, len);
34         int i, j;
35         memset(dp, 0, sizeof(dp));
36         int cur = 1,ans;
37         for(i = 1; i <= len; ++i)
38         {
39             for(j = 1; j <= len; ++j)
40             {
41                 if(s1[i-1] == s2[j-1])
42                     dp[cur][j] = dp[1-cur][j-1] + 1;
43                 else
44                     dp[cur][j] = max(dp[1-cur][j], dp[cur][j-1]);
45             }
46             cur = 1 - cur;
47         }
48         ans = len - dp[len&1][len];
49         printf("%d\n", ans);
50     }
51     return 0;
52 }
代码君

 

HDU 1513 Palindrome,布布扣,bubuko.com

HDU 1513 Palindrome

标签:style   blog   http   color   os   io   for   art   

原文地址:http://www.cnblogs.com/AOQNRMGYXLMV/p/3880238.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!