再次回文

输入:标准输入

输出:标准输出

时间限制: 2秒

是àpalindorme的读取相同的从左边,因为它从右侧的一个或多个字符的序列。例如,ŽTOT女士的 回文,但是,ADAM是不是。

给定一个序列S Ñ资本拉丁字母。有多少种方法可以有符号数(可能为0)的比分淘汰,其余的序列成为一个palidrome的。 应认为是相同的,唯一不同的顺序得分Varints 。

输入

输入文件包含多个测试案例(小于15)。第一行包含一个整数Ţ 表示多少测试用例都遵循。

每个ŧ线包含的序列S(1≤N≤60) 。因此,实际上各条生产线是一个测试案例。

产量

对于每个测试案例输出一行一个整数 - 号的方法。

 

样例输入                             样例输出

3

BAOBAB

AAAA

ABA

22

15

5

 

题意:给定一个字符串,求出字符串中是回文的子字符串。

思路:dp,跟删除字符形成回文有点像。

如果 str[i] == str[j] 那么 dp[i][j] = dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1] + dp[i + 1][j - 1] + 1 = dp[i + 1][j] + dp[i][j - 1] + 1

如果不相等, 那么dp[i][j] = dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1]

代码:

#include <stdio.h>
#include <string.h> int t, n, vis[70][70];
long long d[70][70];
char sb[65]; long long dp(int i, int j) {
long long ans = d[i][j];
if (vis[i][j]) return ans;
vis[i][j] = 1;
if (i > j)
ans = 0;
else if (i == j)
ans = 1;
else if (sb[i] == sb[j]) {
ans = dp(i + 1, j) + dp(i, j - 1) + 1;
}
else {
ans = dp(i + 1, j) + dp(i, j - 1) - dp(i + 1, j - 1);
}
if (ans > d[i][j]) {
d[i][j] = ans;
}
return ans;
}
int main() {
scanf("%d%*c", &t);
while (t --) {
gets(sb);
n = strlen(sb);
memset(vis, 0, sizeof(vis));
memset(d, 0, sizeof(d));
printf("%lld\n", dp(0, n - 1));
}
return 0;
}
 

uva10617 - Again Palindrome(dp)的更多相关文章

  1. uva 10453 - Make Palindrome(dp)

    题目链接:10453 - Make Palindrome 题目大意:给出一个字符串,通过插入字符使得原字符串变成一个回文串,要求插入的字符个数最小,并且输出最后生成的回文串. 解题思路:和uva 10 ...

  2. UVA 10739 String to Palindrome(dp)

    Problem H String to Palindrome Input: Standard Input Output: Standard Output Time Limit: 1 Second In ...

  3. POJ 3280 Cheapest Palindrome DP题解

    看到Palindrome的题目.首先想到的应该是中心问题,然后从中心出发,思考怎样解决. DP问题通常是从更加小的问题转化到更加大的问题.然后是从地往上 bottom up地计算答案的. 能得出状态转 ...

  4. CF 335B. Palindrome(DP)

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

  5. POJ 3280 Cheapest Palindrome(DP)

    题目链接 被以前的题目惯性思维了,此题dp[i][j],代表i到j这一段变成回文的最小花费.我觉得挺难的理解的. #include <cstdio> #include <cstrin ...

  6. uva 10453 - Make Palindrome(dp, 记录路径)

    题目 题意: 给一个字符串 ,判断最少插入多少个字符 使字符串成为回文串, 并输出回文串. 思路:先用dp判断需要个数, 再递归输出路径. #include <iostream> #inc ...

  7. hdu 1513 && 1159 poj Palindrome (dp, 滚动数组, LCS)

    题目 以前做过的一道题, 今天又加了一种方法 整理了一下..... 题意:给出一个字符串,问要将这个字符串变成回文串要添加最少几个字符. 方法一: 将该字符串与其反转求一次LCS,然后所求就是n减去 ...

  8. POJ1159 Palindrome(dp)

    题目链接. 分析: 感叹算法的力量. 方法一: 设 dp[i][j] 为字符串 s, 从 i 到 j 需要添加的最少字符数. 那么如果 s[i] == s[j], dp[i][j] = dp[i+1] ...

  9. poj 3280 Cheapest Palindrome ---(DP 回文串)

    题目链接:http://poj.org/problem?id=3280 思路: dp[i][j] :=第i个字符到第j个字符之间形成回文串的最小费用. dp[i][j]=min(dp[i+1][j]+ ...

随机推荐

  1. shell script 零碎知识

    1.test命令的测试功能 -e  文件名是否存在 -f  文件名是否存在且为文件 -d  文件名是否存在且为目录 范例1    检查/dmtsai是否存在,存在输出 exist  不存在输出 Not ...

  2. liunx下NetworkManager导致网卡不能启动

    前几天在客户现场,配置一台系统为redhat 6.0的服务器,这台服务器是IBM x3755,系统是预装的.在把服务器的IP地址配置完成后,使用命令不能启动网卡.提示:弹出界面 eht0:错误:激活链 ...

  3. 处理json中的异常字符

    在很多场景中需要通过json传递数据,如果json中包含英文的",""'"之类的字符,会导致json解析失败 可以用一些在线的json格式检查网站检查是否含有异 ...

  4. 客户端数据持久化解决方案: localStorage

    客户端数据持久化解决方案: localStorage localStorage主要用来替代cookie,解决cookie读写困难.容量有限的问题. localStorage有以下几个特点 localS ...

  5. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  6. 云服务和虚拟机的预留 IP 地址

    大家好! 我很高兴地向大家宣布,云服务和虚拟机的预留 IP 地址将自 2014年 5月 12日起正式发布.在这篇博客中,我们将演示如何管理预留 IP.将预留 IP 与云服务和虚拟机关联.定价模型和一些 ...

  7. 普里姆(Prim)算法

    /* 普里姆算法的主要思想: 利用二维数组把权值放入,然后找在当前顶点的最小权值,然后走过的路用一个数组来记录 */ # include <stdio.h> typedef char Ve ...

  8. Struts2之自定义局部类型转换器、全局类型转换器

    Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器  如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用 ...

  9. LCP Array(思维)

    LCP Array Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tota ...

  10. dev gridcontrol 单箱效果

    private void gridView1_CellValueChanging(object sender, DevExpress.XtraGrid.Views.Base.CellValueChan ...