http://codeforces.com/contest/335/problem/B

题意:

 给定一个长度不超过5*10^4的只包含小写字母的字符串,要求你求它的回文子序列,如果存在长度为100的回文子序列,那么只要输出长度为一百的回文子序列即可,否则输出它的最长回文子序列.

思路:如果n>=2600,那么就一定会有单个字符构成的100长度的回文子序列。

否则当n<2600时就可以n^2 DP,然后dfs输出

#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
char s[],b[];
int f[][],cnt,n,ans[];
int read(){
int t=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
void dfs(int l,int r){
if (l>r) return;
if (l==r){
b[++cnt]=s[l];
}else{
if (s[l]==s[r]){
b[++cnt]=s[l];
dfs(l+,r-);
b[++cnt]=s[r];
}else{
if (f[l+][r]>f[l][r-]) dfs(l+,r);
else dfs(l,r-);
}
}
}
int main(){
scanf("%s",s+);
n=strlen(s+);
if (n>=){
for (int i=;i<=n;i++){
ans[s[i]-'a']++;
if (ans[s[i]-'a']>=){
for (int j=;j<=;j++)
printf("%c",s[i]);
return ;
}
}
}
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
f[i][j]=;
for (int i=;i<=n;i++)
f[i][i]=;
for (int len=;len<=n;len++)
for (int i=;i+len-<=n;i++){
int j=i+len-;
if (s[i]==s[j]) f[i][j]=std::max(f[i][j],f[i+][j-]+);
else f[i][j]=std::max(f[i][j],std::max(f[i+][j],f[i][j-]));
}
dfs(,n);
if (cnt<=){
for (int i=;i<=cnt;i++)
printf("%c",b[i]);
}else{
for (int i=;i<=;i++)
printf("%c",b[i]);
for (int i=;i>=;i--)
printf("%c",b[i]);
}
return ;
}

Codeforces 335B Palindrome的更多相关文章

  1. CF 335B - Palindrome 区间DP

    335B - Palindrome 题目: 给出一个字符串(均有小写字母组成),如果有长度为100的回文子串,输出该子串.否则输出最长的回文子串. 分析: 虽然输入串的长度比较长,但是如果存在单个字母 ...

  2. Codeforces 486C Palindrome Transformation(贪心)

    题目链接:Codeforces 486C Palindrome Transformation 题目大意:给定一个字符串,长度N.指针位置P,问说最少花多少步将字符串变成回文串. 解题思路:事实上仅仅要 ...

  3. codeforces 486C. Palindrome Transformation 解题报告

    题目链接:http://codeforces.com/problemset/problem/486/C 题目意思:给出一个含有 n 个小写字母的字符串 s 和指针初始化的位置(指向s的某个字符).可以 ...

  4. Codeforces 159D Palindrome pairs

    http://codeforces.com/problemset/problem/159/D 题目大意: 给出一个字符串,求取这个字符串中互相不覆盖的两个回文子串的对数. 思路:num[i]代表左端点 ...

  5. Codeforces 932G Palindrome Partition - 回文树 - 动态规划

    题目传送门 通往???的传送点 通往神秘地带的传送点 通往未知地带的传送点 题目大意 给定一个串$s$,要求将$s$划分为$t_{1}t_{2}\cdots t_{k}$,其中$2\mid k$,且$ ...

  6. codeforces 486C Palindrome Transformation 贪心求构造回文

    点击打开链接 C. Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes ...

  7. CF 335B. Palindrome(DP)

    题目链接 挺好玩的一个题,1Y... #include <cstdio> #include <cstring> #include <iostream> using ...

  8. CodeForces 486C Palindrome Transformation 贪心+抽象问题本质

    题目:戳我 题意:给定长度为n的字符串,给定初始光标位置p,支持4种操作,left,right移动光标指向,up,down,改变当前光标指向的字符,输出最少的操作使得字符串为回文. 分析:只关注字符串 ...

  9. Codeforces 932G Palindrome Partition 回文树+DP

    题意:给定一个串,把串分为偶数段 假设分为$s_1,s_2,s_3....s_k$ 求满足$ s_1=s_k,s_2=s_{ k-1 }... $的方案数模$10^9+7$ $|S|\leq 10^6 ...

随机推荐

  1. 当分页语句遇到union all

    SELECT * FROM (SELECT pubformdat0_.id id332_, pubformdat0_.domain_id domain2_332_, pubformdat0_.proc ...

  2. iOS 9之应用内搜索(CoreSpotlight)API

    金田(github 示例源码) 前言 在iOS9之前我们只能使用Spotlight来搜索应用名称来打开指定App,而其他的内容都是提供给系统使用(信息,联系人,邮件等).在iOS9以后Apple允许开 ...

  3. Android客户端实现七牛云存储文件上传

    1.简单文件上传  上传模型如下. 1.1获得Token 不管是简单文件上传,还是分片上传.断点续传 都需要首先访问服务器,以获得上传凭证信息Token..用于测试时,可以用本地模拟Token信息(有 ...

  4. 详解Java反射各种应用

    Java除了给我们提供在编译期得到类的各种信息之外,还通过反射让我们可以在运行期间得到类的各种信息.通过反射获取类的信息,得到类的信息之后,就可以获取以下相关内容: Class对象 构造器 变量 方法 ...

  5. psp个人软件过程需求文档

    1.  业务需求 1.1 应用背景 开发软件项目进度计划总是那么不准确,延期经常出现,跟可恨的是甚至无法给出一个相对比较明确的延迟时间.很大 因素在于分配给开发人员的完成时间与开发人员的实际完成时间有 ...

  6. thread block grid

    grid里面包含block,block里面包含thread grid里面所有的block都是同样大小的,  每个block最多可以有1024个thread. blockDim表示一个block里面th ...

  7. jquery之营销系统(补偿记录)

    var appPath = getAppPath(); $(function(){ $("#opreateHtml").window("close"); $(& ...

  8. css伪类选择器详细解析及案例使用-----伪类选择器(1)

    动态伪类选择器:E:link :选择匹配的E元素,并且匹配元素被定义了超链接并未被访问过.E:visited :选择匹配的E元素,而且匹配的元素被定义了连接并已被访问过.E:active :选择匹配的 ...

  9. Java多线程练习

    国际惯例,先贴出代码 package jiankong; import java.util.Date; public class jiankong { public static void main( ...

  10. C# Socket传输大文件

    1.基础类TransferFiles,client和server都需要 using System; using System.Collections.Generic; using System.Tex ...