这题说的是给了一个长度为n的字符串(1000)求最长回文子序列,并输出当str[i]==ste[j]时dp[i][j]=dp[i+1][i-1]+2 否则 dp[i][j]=Max(dp[j+1][i],dp[j][i-1]) 要强调一下这uva真是强大 每个后面都加一个string都不爆内存太厉害了

#include <iostream>
#include <string.h>
#include <algorithm>
#include <string>
#include <cstdio>
using namespace std;
const int maxn =;
struct point{
int len;
string s;
bool operator <(const point &A)const{
return len<A.len||(len==A.len&&s>A.s);
}
}dp[maxn][maxn];
char s1[maxn],s2[maxn];
int main()
{
for(int i=; i<maxn-; ++i)
dp[i][].len=dp[][i].len=,dp[i][].s=dp[][i].s="";
while(scanf("%s",s1+)==){
int n= strlen(s1+);
for(int i=;i<=n; ++i)
dp[i][i].len=,dp[i][i].s=s1[i];
for(int i=; i<=n; ++i){
for(int j=i-; j>=; --j){
dp[j][i].len=;
dp[j][i].s="";
if(s1[i]==s1[j]){
dp[j][i].len=dp[j+][i-].len+;
dp[j][i].s+=s1[j];
dp[j][i].s+=dp[j+][i-].s;
dp[j][i].s+=s1[i];
// if(dp[j][i]<dp[j+1][i]) dp[j][i]=dp[j+1][i];
//if(dp[j][i]<dp[j][i-1]) dp[j][i]=dp[j][i-1];
}else{
if(dp[j+][i]<dp[j][i-])
dp[j][i]=dp[j][i-];
else dp[j][i]=dp[j+][i];
}
}
}
cout<<dp[][n].s<<endl;
} return ;
}

uva11404的更多相关文章

  1. UVa11404 - Palindromic Subsequence(区间DP+打印路径)

    题目大意 给定一个字符串,要求你删除尽量少的字符,使得原字符串变为最长回文串,并把回文串输出,如果答案有多种,则输出字典序最小的 题解 有两种解法,第一种是把字符串逆序,然后求两个字符串的LCS,并记 ...

  2. UVA11404:Palindromic Subsequence

    回文子串dp,最小字典序的话需要记录一下,注意是string型的,不能只记录一个字符,因为可能出现相等的情况 #include<cstdio> #include<cstdlib> ...

  3. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  4. [置顶] 刘汝佳《训练指南》动态规划::Beginner (25题)解题报告汇总

    本文出自   http://blog.csdn.net/shuangde800 刘汝佳<算法竞赛入门经典-训练指南>的动态规划部分的习题Beginner  打开 这个专题一共有25题,刷完 ...

  5. UVa 11404 回文子序列(LCS求最长回文串长度)

    https://vjudge.net/problem/UVA-11404 题意: 给定一个由小写字母组成的字符串,删除其中的0个或多个字符,使得剩下的字母(顺序不变)组成一个尽量长的回文串.如果有多解 ...

随机推荐

  1. 百度地图地址查询API使用

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgsAAALxCAIAAABdNHLmAAAgAElEQVR4nOy9/VMbZ5rvnf/hbM7zy3 ...

  2. 非旋转Treap

    Treap是一种平衡二叉树,同时也是一个堆.它既具有二叉查找树的性质,也具有堆的性质.在对数据的查找.插入.删除.求第k大等操作上具有期望O(log2n)的复杂度.     Treap可以通过节点的旋 ...

  3. LeetCode——Single Number II

    Description: Given an array of integers, every element appears three times except for one. Find that ...

  4. window.postMessage跨文档通信

    window.postMessage 1.浏览器兼容情况:IE8+.chrome.firefox等较新浏览器都至此. 2.使用方法: a.otherWindow.postMessage( messag ...

  5. java中生成流水号的一个例子(使用关系型数据库)

    在实际的开发中,可能会有根据一定的规则生成流水号的需求(比如根据根据公司编码和日期生成4位流水号)我们可以把公司和日期联合起来作为一个业务编码,把这个业务编码和序列的值存储到数据库中,每次需要生成流水 ...

  6. 把 Activity 改成 ListActivity继续使用 setContentView

    ListActivity has a default layout that consists of a single, full-screen list in the center of the s ...

  7. android 点九工具介绍

    1=============================9.png简介:“点九”是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png android平台有多种不同的 ...

  8. open live writer 安装 markdown 插件

    我自己用的是 OpenLiveWriter ,所以本篇只讲 OLW 的,WindowsLiveWriter 戳 MarkdownInWindowsLiveWriter,OpenLiveWriter 戳 ...

  9. Android-aidl, binder,surfaceview

    http://blog.csdn.net/stonecao/article/details/6425019 http://www.cnblogs.com/linucos/archive/2012/05 ...

  10. PHP对象在内存中的分配

    对像在PHP 里面和整型.浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?内存从逻辑上 说大体上是分为4 段,栈空间段.堆空 ...