uva10617 - Again Palindrome(dp)
再次回文
输入:标准输入
输出:标准输出
时间限制: 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)的更多相关文章
- uva 10453 - Make Palindrome(dp)
题目链接:10453 - Make Palindrome 题目大意:给出一个字符串,通过插入字符使得原字符串变成一个回文串,要求插入的字符个数最小,并且输出最后生成的回文串. 解题思路:和uva 10 ...
- UVA 10739 String to Palindrome(dp)
Problem H String to Palindrome Input: Standard Input Output: Standard Output Time Limit: 1 Second In ...
- POJ 3280 Cheapest Palindrome DP题解
看到Palindrome的题目.首先想到的应该是中心问题,然后从中心出发,思考怎样解决. DP问题通常是从更加小的问题转化到更加大的问题.然后是从地往上 bottom up地计算答案的. 能得出状态转 ...
- CF 335B. Palindrome(DP)
题目链接 挺好玩的一个题,1Y... #include <cstdio> #include <cstring> #include <iostream> using ...
- POJ 3280 Cheapest Palindrome(DP)
题目链接 被以前的题目惯性思维了,此题dp[i][j],代表i到j这一段变成回文的最小花费.我觉得挺难的理解的. #include <cstdio> #include <cstrin ...
- uva 10453 - Make Palindrome(dp, 记录路径)
题目 题意: 给一个字符串 ,判断最少插入多少个字符 使字符串成为回文串, 并输出回文串. 思路:先用dp判断需要个数, 再递归输出路径. #include <iostream> #inc ...
- hdu 1513 && 1159 poj Palindrome (dp, 滚动数组, LCS)
题目 以前做过的一道题, 今天又加了一种方法 整理了一下..... 题意:给出一个字符串,问要将这个字符串变成回文串要添加最少几个字符. 方法一: 将该字符串与其反转求一次LCS,然后所求就是n减去 ...
- POJ1159 Palindrome(dp)
题目链接. 分析: 感叹算法的力量. 方法一: 设 dp[i][j] 为字符串 s, 从 i 到 j 需要添加的最少字符数. 那么如果 s[i] == s[j], dp[i][j] = dp[i+1] ...
- poj 3280 Cheapest Palindrome ---(DP 回文串)
题目链接:http://poj.org/problem?id=3280 思路: dp[i][j] :=第i个字符到第j个字符之间形成回文串的最小费用. dp[i][j]=min(dp[i+1][j]+ ...
随机推荐
- 未能加载文件或程序集 Microsoft.ReportViewer.Common, Version=11.0.0.0
原文:未能加载文件或程序集 Microsoft.ReportViewer.Common, Version=11.0.0.0 System.IO.FileNotFoundException: 未能加载文 ...
- Struts 2.3.4.1完整示例
[系统环境]Windows 7 Ultimate 64 Bit [开发环境]JDK1.6.21,Tomcat6.0.35,MyEclipse10 [其他环境]Struts2.3.4.1 [项目描述]S ...
- 网易云课堂_程序设计入门-C语言_第六章:数组_2鞍点
2 鞍点(5分) 题目内容: 给定一个n*n矩阵A.矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最大数,第j列上的最小数.一个矩阵A也可能没有鞍点. 你的任务是找出A的鞍点. 输入格 ...
- sql server操作2:查询数据库语句大全【转】
注:以下操作均建立在上篇文章sql Server操作1的数据基础之上 一.实验目的 熟悉SQL语句的基本使用方法,学习如何编写SQL语句来实现查询 二.实验内容和要求 使用SQL查询分析器查询数据,练 ...
- android VoiceRecognition 语音识别并打印到列表上
package com.example.wenandroid; import java.util.ArrayList; import java.util.List; import android.ap ...
- iSlider手机平台JS滑动组件
iSlider手机平台JS滑动组件,无任何插件依赖.它能够处理任何元素,例如图片或者DOM元素.它有如下特性:能够自定义动画,自带的动画包括default, rotate, flip 和 depth你 ...
- Gulp思维——Gulp高级技巧
本文翻译自Getting gulpy -- Advanced tips for using gulp.js 感受过gulp.js带来的兴奋过后,你需要的不仅仅是它的光鲜,而是切切实实的实例.这篇文章讨 ...
- 【整理】Ajax异步实现的几种方式总结
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术.GET ...
- 看到当年自己学SQL Server 的笔记
数据库 数据量DataBase,不同类型的数据应该放到不同的数据库中, .便于对各个数据类别进行个性管理 .避免命名冲突 .安全性更高; table(表):数据库中的关系指的就是表; 一张表就是一个类 ...
- Eclipse 浏览文件插件- OpenExplorer
http://blog.csdn.net/w709854369/article/details/6599167 EasyExplorer 是一个类似于 Windows Explorer的Eclips ...