标题效果

定的字符串长度的串和内容。中的字符可以在任何位置被插入。它至少需要为数字,这使得编程回文串串.

回文序列从左至右,从右到左和读取相同.

例如.

aaaacbbbb它是一个回文串

aaab前面插入b使得原串变为baaab这个回文串

我的思路.

1.假设该串为空串,或者长度为一。该串是回文串.

2.假设有字符串,a[o...n-1],(0<=l,r<n)假设从l-r之

1可能是l-r对称回文(假设a[l]==a[r]),在匹配[l+1,r-1]这个串

2.l,给r处加入字a[l]和l位置匹配,在匹配[l,r-1]这个串

3l处加入字符a[r],和r位置匹配。在匹配[l+1,r]这个串

3.用以上方法加上备忘录d[l][r]来记录算过的串的最少插入数目

d[l][r]记录从l...r匹配插入的最少字符。问题d[0][n-1]

if(a[l]==a[r]) dd[l][r]=d[l+1][r+1];

else dd[l][r]=max(dd[l+1][r],dd[l][r-1])+1;

备忘录开成short。否则内存超,

险过得的代码.

/*Source Code
Problem: 1159 User:
Memory: 49652K Time: 1782MS
Language: GCC Result: Accepted Source Code*/ /*插入最少的数字是原来数组成回文串*/
#include <stdio.h>
#include <string.h>
short dd[5001][5001];
char str[5002]="";
int min(int a,int b) {
return a<b?a:b;
}
int f(int l,int r){
if(l>=r) return 0;
else if(dd[l][r]>=0) return dd[l][r];//已经计算出来答案
else{
if(str[l]==str[r])
dd[l][r]=f(l+1,r-1);
else
dd[l][r]=min(f(l+1,r),f(l,r-1))+1;
return dd[l][r];
}
}
int main(){
int n;
scanf("%d",&n);
scanf("%s",str);
memset(dd,-1,sizeof(dd));
printf("%d\n",f(0,n-1));
return 0;
}

版权声明:本文博主原创文章。博客,未经同意不得转载。

1159 Palindrome(最小插入回文串)的更多相关文章

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

    POJ 1159 Palindrome(字符串变回文:LCS) id=1159">http://poj.org/problem? id=1159 题意: 给你一个字符串, 问你做少须要 ...

  2. [LeetCode] Longest Palindrome 最长回文串

    Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...

  3. [LeetCode] Palindrome Partitioning 拆分回文串

    Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...

  4. lintcode:Palindrome Partitioning 分割回文串

    题目: 分割回文串 给定一个字符串s,将s分割成一些子串,使每个子串都是回文串. 返回s所有可能的回文串分割方案. 样例 给出 s = "aab",返回 [ ["aa&q ...

  5. Longest Palindrome 最长回文串问题

    1.题目 Given a string s, find the longest palindromic substring in s. You may assume that the maximum ...

  6. 131 Palindrome Partitioning 分割回文串

    给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串.返回 s 所有可能的分割方案.例如,给出 s = "aab",返回[  ["aa"," ...

  7. 409 Longest Palindrome 最长回文串

    给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串.在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串.注意:假设字符串的长度不会超过 ...

  8. Leetcode131. Palindrome Partitioning分割回文串

    给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa",&quo ...

  9. LeetCode409Longest Palindrome最长回文串

    给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意: 假设字符串的长度不 ...

随机推荐

  1. [Network]Wireless and Mobile

    Wireless 1 Introduction 1.1 Elements 1. Wireless Hosts Wireless does not mean mobility. 2. Base Stat ...

  2. DOM - Element 对象

    http://www.runoob.com/dom/dom-element.html Element 对象 Element 对象代表 XML 文档中的一个元素.元素可以包含属性.其他元素或文本.如果一 ...

  3. POJ 4003 Bob’s Race && HDU4123 Bob’s Race (dfs+rmq)

    Bob’s Race Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 378   Accepted: 119 Descript ...

  4. hdu2563(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2563 解题思路:要分两种情况来考虑,a(n)为向上,b(n)为向左跟向右,f(n)为当前方案数.a(n ...

  5. Codeforces 461B - Appleman and Tree 树状DP

    一棵树上有K个黑色节点,剩余节点都为白色,将其划分成K个子树,使得每棵树上都仅仅有1个黑色节点,共同拥有多少种划分方案. 个人感觉这题比較难. 如果dp(i,0..1)代表的是以i为根节点的子树种有0 ...

  6. Erlangserver紧内存优化解决方案

    提出的问题:server100万人在线,16G内存快被吃光. 玩家进程占用内存偏高 解决方法: 第一步: erlang:system_info(process_count). 查看进程数目是否正常,是 ...

  7. 【Swift】—— 中国课程

    Apple宣布更换oc武器语言 Swift ,在牛叉的中国开发者社区9几天之内,以完成.这是福音许多中国的开发商啊,兴奋的发现之后,写存储在日志,马上防止忘记: GitHub开源项目:<The ...

  8. malloc函数的一种简单的原理性实现

    malloc()是C语言中动态存储管理的一组标准库函数之一.其作用是在内存的动态存储区中分配一个长度为size的连续空间.其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针 ...

  9. Codeforces #252 (Div. 2) B. Valera and Fruits

    题目倒是不难,可是读起来非常恶心 依据题目的描写叙述不easy找到适合存储的方法 后来我就想不跟着出题人的思路走 我自己开一个数组c 令c[a[i]] = b[i] 则c[i] == [j] 代表第i ...

  10. 深入浅出KnockoutJS

    深入浅出KnockoutJS 写在前面,本文资料大多来源网上,属于自己的学习笔记整理. 其中主要内容来自learn.knockoutjs.com,源码解析部分资料来自司徒正美博文<knockou ...