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],需要再减去。

如果第i个字符和第j个相同,那么又多了两种选择,第一种是只保留左右两个(1种),第二种是去掉左右两个(ans[i+1][j-1])。

错误原因:

1. 忘开longlong

2. (本地)并不明白删去最左侧和最右侧的字符得到的方案的重叠部分是哪个。看了题解以后瞬间理解。

3. (本地,更早)当成与POJ-1141相同的,然而事实上完全不同

 #include<cstdio>
#include<cstring>
typedef long long LL;
LL T,TT,len;
char s[];
LL ans[][];
LL get(LL l,LL r)
{
if(l>r) return ;
if(l==r) return ;
if(ans[l][r]) return ans[l][r];
LL i,sum=get(l+,r)+get(l,r-)-get(l+,r-);
// for(i=l;i<r;i++)
// sum+=get(l,i)+get(i+1,r);
//***1.删左边get(l+1,r)或删右边get(l,r-1),重复的是get(l+1,r-1);2.左右都删,或只保留左右(要求左右相同)
if(s[l]==s[r]) sum+=get(l+,r-)+;
return ans[l][r]=sum;
}
int main()
{
scanf("%lld",&T);
for(TT=;TT<=T;TT++)
{
scanf("%s",s+);
len=strlen(s+);
memset(ans,,sizeof(ans));
printf("Case %lld: %lld\n",TT,get(,len));
}
return ;
}

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

  1. Lightoj 1025 - The Specials Menu (区间DP)

    题目链接: Lightoj 1025 - The Specials Menu 题目描述: 给出一个字符串,可以任意删除位置的字符,也可以删除任意多个.问能组成多少个回文串? 解题思路: 自从开始学dp ...

  2. 1025 - The Specials Menu

    1025 - The Specials Menu    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 ...

  3. Lightoj 1025 - The Specials Menu

    区间dp /* *********************************************** Author :guanjun Created Time :2016/6/30 23:2 ...

  4. Light OJ 1025 - The Specials Menu(动态规划-区间dp)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1025 题目大意:一串字符, 通过删除其中一些字符, 能够使这串字符变成回文串. ...

  5. Light OJ 1025 - The Specials Menu(区间DP)

    题目大意:     给你一个字符串,问有多少种方法删除字符,使得剩下的字符是回文串. 有几个规定: 1.空串不是回文串 2.剩下的字符位置不同也被视为不同的回文串.如:AA有三种回文串 A, A, A ...

  6. 【lightoj-1025】The Specials Menu(区间DP)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1025 [题目大意] 求一个字符串删去任意字符可以构成多少个不同的回文串 [分析 ...

  7. LightOJ1025 The Specials Menu(区间DP)

    给一个字符串,问有几种删字符的方式使删后的非空字符串是个回文串. 当然区间DP:dp[i][j]表示子串stri...strj的方案数 感觉不好转移,可能重复算了.我手算了"AAA" ...

  8. lightoj 1025 区间dp

    #include<bits/stdc++.h> using namespace std; typedef long long ll; char a[70]; ll dp[70][70]; ...

  9. lightoj 1025【区间DP】

    题意: 给出一个word,求有多少种方法你从这个word清除一些字符而达到一个回文串. 思路: 区间问题,还是区间DP: 我判断小的区间有多少,然后往外扩大一点. dp[i,j]就代表从i到j的方案数 ...

随机推荐

  1. 【网站支付PHP篇】thinkPHP集成汇潮支付(ecpss)

    系列目录 支付宝集成:http://www.cnblogs.com/nerve/p/3437879.html 系列说明 最近在帮朋友的系统安装支付模块(兑换网站积分),现在总结一些开发心得,希望对大家 ...

  2. python day- 6 is 和 ==的区别 encode 和 decode

    1.is 和  == 的区别. == 是由来判断左右两边的内容是否相等. is 是用来判断内存地址是否相同. 引进 id (   )函数 小数据池: 对于字符串 ,数字 ,bool 值进行 id()计 ...

  3. Python中文问题研究

    我曾经在深入浅出java中文问题系 列中研究过java的中文问题,现在中文问题已经不再羁绊我在java世界中漫游的脚步了.最近,对Python产生了浓厚的兴趣,谁知道跟中文问题这个 老朋友又一次不期而 ...

  4. sql建表,建索引注意事项

    建表注意 .建议字段定义为NOT NULL 搜索引擎 MyISAM InnoDB 区别 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基 ...

  5. using the flume-ng-sql-source plugin to push data from Mysql DB to Spark

    org.apache.flume.EventDeliveryException while running flume and sending data to spark · Issue #21 · ...

  6. console调试命令

    一.显示信息的命令 <!DOCTYPE html> <html> <head> <title>常用console命令</title> < ...

  7. 【bzoj3282】Tree

    LCT模板题: 话说xor和的意思是所有数xor一下: #include<iostream> #include<cstdio> #include<cstring> ...

  8. 关于苹果iPhone手机对页面margin属性无效的解决方法一(如有错误,请留言批评)

    这个问题,是在给商城网站底部footer设置margin属性的时候发现的,先把出现问题的截图发出来看一下 ​安卓手机,打开正常 ​iphone6 p 打开出现的问题(无视margin-bottom:6 ...

  9. 怎么往mac中finder个人收藏里添加文件夹

    1.打开Finder,点击左上角finder偏好设置 2.选择边栏 3.如果侧栏中没有的文件夹,直接长按文件夹直接拖入.

  10. JS复制文本到剪切板

    1.首先引入js文件, <script src="dist/clipboard.min.js"></script> 2.初始化 <script typ ...