Lightoj 1025 - The Specials Menu】的更多相关文章

题目链接: Lightoj 1025 - The Specials Menu 题目描述: 给出一个字符串,可以任意删除位置的字符,也可以删除任意多个.问能组成多少个回文串? 解题思路: 自从开始学dp,感觉自己智商一直处于离线状态.席八啊啊啊啊啊啊!今天随机到这个题目,看了好久竟然没有看出来是区间DP.知道是区间DP后立马感觉明白. 情景设定 dp[l][r] 表示 区间 [l, r] 内的回文串数目. 状态转移:dp[l][r] = dp[l][r-1] + dp[l+1][r], 但是这样会…
区间dp /* *********************************************** Author :guanjun Created Time :2016/6/30 23:24:27 File Name :1025.cpp ************************************************ */ #include <iostream> #include <cstring> #include <cstdlib> #i…
1025 - The Specials Menu    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Feuzem is an unemployed computer scientist who spends his days working at odd-jobs. While on the job he always manages to find algorithmic problems…
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1025 题目大意:一串字符, 通过删除其中一些字符, 能够使这串字符变成回文串. 现在给你一串字符,问能够得到多少种不同的回文串: 注意:字符串"abba", 可以得到9串回文串,分别为'a', 'a', 'b', 'b', 'aa', 'bb', 'aba', 'aba', 'abba'. 解题思路:声明dp[i][j]为字符串[i,j]区间中通过删除可以得到不同回…
题目大意:     给你一个字符串,问有多少种方法删除字符,使得剩下的字符是回文串. 有几个规定: 1.空串不是回文串 2.剩下的字符位置不同也被视为不同的回文串.如:AA有三种回文串 A, A, AA ================================================================================================   #include<cstdio> #include<cstring> #includ…
The Specials Menu LightOJ - 1025 题意:在给定的字符串中删去一些字符,使其成为回文串(不能全部都删).求方案数. 方法:常规的区间dp.ans[i][j]表示在i到j的串中删去一些使得成为回文串的方案数. 对于长度为1的串,显然只有1种方法(只保留自身). 对于长度大于1的串: 可以删去最左侧字符(方案数ans[i+1][j]),也可以删去最右侧字符(方案数ans[i][j-1]).初步的答案也就是这两者相加.但是这两者有重复的部分,就是ans[i+1][j-1]…
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1025 [题目大意] 求一个字符串删去任意字符可以构成多少个不同的回文串 [分析] 区间dp.传送门 dp[i][j] 代表从字符i到j, 分两种情况,s[i] != s[j]时,dp[i][j] = 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] +…
给一个字符串,问有几种删字符的方式使删后的非空字符串是个回文串. 当然区间DP:dp[i][j]表示子串stri...strj的方案数 感觉不好转移,可能重复算了.我手算了"AAA"这个数据,然后就搞出转移的方式: d[i][j] = ∑ d[i'][j']+1 (i<=i'<=j'<=j 且 str[i']==str[j']) 这个区间DP和经典例题相邻石子合并一样,枚举长度然后枚举起点,这样保证计算过程的拓扑有序.时间复杂度O(strlen4). #include…
#include<bits/stdc++.h> using namespace std; typedef long long ll; char a[70]; ll dp[70][70]; int main(){ int T; scanf("%d",&T); int n; int ca = 0; while(T--){ memset(dp,0,sizeof(dp)); scanf("%s",a+1); int n = strlen(a+1); fo…
题意: 给出一个word,求有多少种方法你从这个word清除一些字符而达到一个回文串. 思路: 区间问题,还是区间DP: 我判断小的区间有多少,然后往外扩大一点. dp[i,j]就代表从i到j的方案数. 状态转移: 其实对于在任意区间[i ,j],都可以, 在子区间[i+1,j]中可以直接去掉s[j]时,顺便去掉s[i],所以就有它的方案, 在子区间[i,j-1]中可以直接去掉s[i]时,顺便去掉s[j],所以就有它的方案, 但是s[i],s[j]不相等的时候 dp[i+1,j],dp[i,j-…