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. EF中 Code-First 方式的数据库迁移

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...

  2. PowerDesigner逆向工程,从SQL Server数据库生成Physical Model

    提前声明:这种方式貌似只能是Power Designer安装在数据库服务器的时候才可以,因为我按照成功的这个再去从本机逆向连接远程服务器的时候,一直提示:test failed......不讲了,尴尬 ...

  3. 通过反射获取java nio Direct Memory 的最大值和已使用值

    (ps:jdk1.7及之后可通过MBean获取这两个值)

  4. queue_action

    http://www.learn4master.com/programming-language/python/python-queue-for-multithreading

  5. 使用zxing编写的二维码生成解析工具:QRCoder

    zxing GitHub地址 QRCoder GitHub地址 TipDialog.java package com.wolf_pan; import java.util.Timer; import ...

  6. C++ JSON解析库RapidJSON

    https://github.com/Tencent/rapidjson jsontext.txt { "result" : [ { "face_id" : & ...

  7. 在centos7下手工安装和配置Nginx

    一.什么是Nginx Nginx("enginex")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器,在高连接并发的情况下Nginx是Apa ...

  8. Parallels Desktop 设置win网络连接

    目的: 1 虚拟机中的win系统技能访问外网 2 可以和Mac系统互联 首先来实现1,很简单: 打开控制中心对应系统的设置 选择[硬件]->[网络] 源:设置共享网络 到此就达到1目的了: 现在 ...

  9. YTU 2444: C++习题 对象转换

    2444: C++习题 对象转换 时间限制: 1 Sec  内存限制: 128 MB 提交: 914  解决: 581 题目描述 定义一个Teacher(教师)类(教师号,姓名,性别,薪金)和一个St ...

  10. BestCoder5 1001 Poor Hanamichi(hdu 4956) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4956(它放在题库后面的格式有一点点问题啦,所以就把它粘下来,方便读者观看) 题目意思:给出一个范围 [ ...