1 /* 2  * DA-term-Palindrome.cpp 3  * 4  *    DP 5  * 6  *    动态规划求解。 7  8     设ch[1]..ch[n]表示字符串1至n位,i为左游标,j为右游标 ,则i从n递减,j从i开始递增。 9     min[i][j]表示i和j之间至少需要插入多少个字符才能对称,初始置全0 ,我们最终需要得到的值是min[1][n].10     则11     if(ch[i]==ch[j])                                    //如果两个游标所指字符相同,向中间缩小范围12         min[i][j]=min[i+1][j-1];13     else14           min[i][j] = 1 +  (min[i+1][j]和min[i][j-1]中的较小值);     //如果不同,典型的状态转换方程15 16  *17  */18 19 #include <cstdio>20 using namespace std;21 22 const int maxn = 5000 + 5;23 24 int len, dp[3][maxn] = {};        //循环数组,否则MTL25 // dp[k][i] : 长度为k、起点为i的子串变成回文串的最小加字数(k处为循环数组)26 //对应上面的 min[i][i+k-1]27 char str[maxn];28 29 30 int main(){31     scanf("%d%s", &len, str);32 33 34     //k_0 : 当前长度; k_1: 当前长度-1; k_2:当前长度-235     int k, i, j, k_0 = 2, k_1 = 1, k_2 = 0;36     for(k=2; k<=len; k++){37         for(i=len-k; i>=0; i--){38             j = i + k - 1;39 40             if(str[i] == str[j]) dp[k_0][i] = dp[k_2][i+1];41             else{42                 dp[k_0][i] = dp[k_1][i];43                 if(dp[k_0][i] > dp[k_1][i+1]) dp[k_0][i] = dp[k_1][i+1];44                 dp[k_0][i]++;45             }46         }47         k_0 = (k_0 + 1) % 3;            //update48         k_1 = (k_1 + 1) % 3;49         k_2 = (k_2 + 1) % 3;50     }51     printf("%d\n", dp[k_1][0]);52 53 54     return 0;55 }

poj-1159 Palindrome **相关推荐

  1. POJ 1159 Palindrome(字符串变回文:LCS)

    POJ 1159 Palindrome(字符串变回文:LCS) http://poj.org/problem? id=1159 题意: 给你一个字符串, 问你做少须要在该字符串中插入几个字符能是的它变 ...

  2. 动态规划——Poj 1159 Palindrome

    1)   题目 Palindrome Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 46005 Accepted: 15688 ...

  3. POJ 1159 - Palindrome 优化空间LCS

    将原串和其逆序串的最长公共子序列求出来为M..那么2*n-M就是所需要加的最少字符..因为求出的M就是指的原串中"潜伏"的最长回文.. 问题转化为求LCS..但是n最大到5000. ...

  4. POJ 1159 (DP)

    题目:http://poj.org/problem?id=1159 思路: 找出原串的最长回文子串,当然这里说的回文子串可以不连续.用原串的长度减去最长回文子串的长度即可得出结果. 设原串a[5001 ...

  5. 1159 Palindrome

    Palindrome Time Limit: 3000ms Memory limit: 65536kB 题目描述 A palindrome is a symmetrical string, that ...

  6. POJ 3974 Palindrome (算竞进阶习题)

    hash + 二分答案 数据范围肯定不能暴力,所以考虑哈希. 把前缀和后缀都哈希过之后,扫描一边字符串,对每个字符串二分枚举回文串长度,注意要分奇数和偶数 #include <iostream& ...

  7. POJ - 3974 Palindrome(二分+哈希/马拉车)

    题目链接:点击查看 题目大意:给出一个字符串,求字符串中最长的回文子串,这个字串可以包含主串本身 题目分析:这个题就是之前徐州网络赛的那个回文题目的弱化版..那个题目正解是要用回文自动机,但我不会,当 ...

  8. 滚动数组~\(≧▽≦)/~

    今天第一次用了滚动数组,缘由要从一道题说起:POJ 1159 Palindrome 题意:给你一个字符串,求对字符串最少添加几个字符可变为回文串. 分析: 简单做法是直接对它和它的逆序串求最长公共子序 ...

  9. (精)【ACM刷题之路】POJ题目详细多角度分类及推荐题目

    POJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: ...

  10. POJ刷题列表——正在进行

    转载自:http://blog.csdn.net/pyub153/article/details/50480333 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心 ...

最新文章

  1. java基盘JavaScript_JavaWeb学习:SSH整合(无障碍整合)
  2. 创建自己的Vagrant box
  3. gearman mysql持久化_gearman + mysql方式实现持久化操作示例
  4. 如何评价MSRA视觉组最新提出的Deformable ConvNets V2?
  5. Codeforces Round #179 (Div. 2): D. Greg and Graph(Floyd)
  6. 服务器操作系统修复补丁,最后的更新!微软Windows 7发布KB4534310修复补丁
  7. allegro怎么导出PCB文件里封装
  8. HTML特殊字符符号大全
  9. 云计算基础(二)—— 虚拟化
  10. Windows实现微信双开
  11. Private,Public,Protected
  12. 解决计算机问题联盟,[转载]Ansys证书问题解决方法
  13. 【vue教程】来自JSpang 技术胖的视频
  14. ligo 原理_在LIGO的实验中,Ubuntu被用来检测引力波
  15. ismusicactive副作用_Android得到一个闹钟在第三方
  16. 电厂计算机工作原理是什么,电力猫的工作原理是什么?电力猫怎么用?
  17. 100-Days-Of-ML oneday
  18. 数据可视化datav使用教程文档1
  19. hyperledger v1.0.5 区块链入门
  20. conda安装python3.5_解决 Raspbian Miniconda 无法安装最新 Python3.6

热门文章

  1. 7.26T2某不科学的迷你激光炮
  2. debian安装emacs23
  3. iphone android 开发指南 http://mobile.tutsplus.com
  4. intellij idea cpu占用率太大太满 运行速度太慢解决方案
  5. json loads No JSON object could be decoded 问题解决
  6. python报错UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe8 in position 0 解决方案
  7. maven不能加载ojdbc14.jar的解决方法
  8. Linux入门(7)——Ubuntu16.04安装wps并解决系统缺失字体问题
  9. python 如何跳过异常继续执行
  10. 如何使用AngularJS绑定到复选框值列表?