uva 10617 Again Palindrome (DP)
来源:互联网 发布:qr是什么软件 编辑:程序博客网 时间:2024/06/06 09:20
uva 10617 Again Palindrome
题目大意:给出一段字符串,可进行删除操作,可以删除任意位置任意个数(可以是0)的字符。问,进行删除操作使原本字符串变成回文字符串,有几种方式。
解题思路:
dp[i][j] = 1 (i == j),单独一个字符也是回文字符串
s[i] != s[j]时, dp[i][j] = dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1],
dp[i + 1][j] 和 dp[i][j + 1]的公共部分dp[i + 1][j - 1]要减掉一次
s[i] == s[j]时, dp[i][j] = dp[i + 1][j] + dp[i][j - 1] + 1,
当s[i] == s[j]的时候, 比s[i] != s[j]多了一类情况,就是dp[i+1][j-1]中的任意回文子串都可以同时在前后加上s[i]和s[j],并且s[i]s[j]也是个回文子串
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <cstdlib>using namespace std;typedef long long ll;char s[100];ll dp[100][100];int main() { int T; scanf("%d", &T); while (T--) { scanf("%s", s); int len = strlen(s); for (int i = 0; i < len; i++) { dp[i][i] = 1; } for (int i = len - 2; i >= 0; i--) { for (int j = i + 1; j < len; j++) { if (s[i] == s[j]) { dp[i][j] = dp[i + 1][j] + dp[i][j - 1] + 1; } else { dp[i][j] = dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1]; } } } printf("%lld\n", dp[0][len - 1]); } return 0;}
0 0
- uva 10617 Again Palindrome (DP)
- uva 10617 - Again Palindrome(dp)
- UVA 10617 Again Palindrome --dp
- UVa 10617 Again Palindrome(回文串区间DP)
- UVA 题目10617 - Again Palindrome(区间DP)
- UVa 10617 - Again Palindrome 字符串dp
- Uva 10617 Again Palindrome(区间dp)
- UVa 10617 Again Palindrome(回文 区间dp)
- uva 10617 Again Palindrome
- UVA 10617 - Again Palindrome
- UVA 10617 Again Palindrome
- UVa 10617 - Again Palindrome
- uva 10617 Again Palindrome
- UVA - 10617 Again Palindrome
- UVa:10617 Again Palindrome
- UVA 10617 Again Palindrome
- uva 10617 - Again Palindrome
- UVA - 10617 Again Palindrome
- Maven+SpringMVC+SpringJDBC搭建web项目FAQ
- 省赛选拔赛——个人赛第四场
- 蓝桥杯 大臣的旅费
- 51页14题,斐波那契分数序列前n项和。
- 双系统
- uva 10617 Again Palindrome (DP)
- Trie树,字典树,前缀树
- hdu 1875 最小生成树 点用坐标表示
- 使用积累(图片像素修改)
- iOS旋转概念
- 蓝桥杯 2014 本科B组 c++ 预赛 第九题 地宫取宝
- Css3 tooltip设计实践
- 学习笔记2-IO流
- Java---27---Set集合及其子类HashSet