CF R 635 div1 C Kaavi and Magic Spell 区间dp
一打CF才知道自己原来这么菜 这题完全没想到.
可以发现 如果dp f[i][j]表示前i个字符匹配T的前j个字符的方案数 此时转移变得异常麻烦 状态转移一次变成了O(n).
会超时 而且这个状态的转移也是不正确的 可能当前的S字符串后面放了一些不能匹配的东西 但是此时却体现不出来.
那我们如何描述每次增加一个字符且和T匹配多少这种状态呢.
一个思路 先对于S串的某个i暴力枚举 其对应在T中的位置 这样的话dp就变成了
f[i][j][k]表示前i个字符 匹配了T中j~k区间的方案数 这样就没有刚才的问题了。
不过 这个状态还是不行 因为存在重复 的方案被统计到了.
仔细思考 对于刚才的那个状态 之所以会重复是因为两种方案的重叠都被我们枚举到了。
考虑最终的答案的方案数 不难发现对于i号点来说 其位置是不固定的。
我们完全可以只枚举1的位置在哪然后进行上述的区间dp.
这样的话就既没有加到队首 整体右移的问题 也没有状态数重复的问题.
有状态 f[i][j]表示 前j-i+1个字符 匹配了T的 i~j的区间的方案数.
考虑转移.
对于 第j-i+2个字符 可以判断一下能否转移即可。
由于每次使用的字符固定 不需要再枚举决策。
所以复杂度为n^2.
const int MAXN=3010;
int T,n,ans,m;
int f[MAXN][MAXN];
char a[MAXN],b[MAXN];
int main()
{
freopen("1.in","r",stdin);
gc(a);gc(b);
n=strlen(a+1);
m=strlen(b+1);
rep(1,n,i)if(a[1]==b[i]||i>m)f[i][i]=1;
for(int len=2;len<=n;++len)
{
for(int i=1;i<=n-len+1;++i)
{
int j=i+len-1;
if(a[len]==b[i]||i>m)f[i][j]=(f[i][j]+f[i+1][j])%mod;
if(a[len]==b[j]||j>m)f[i][j]=(f[i][j]+f[i][j-1])%mod;
}
}
rep(m,n,i)ans=(ans+f[1][i])%mod;
put(ans*2%mod);
return 0;
}
CF R 635 div1 C Kaavi and Magic Spell 区间dp的更多相关文章
- CF1336C Kaavi and Magic Spell
CF1336C Kaavi and Magic Spell 区间dp 题意 给一个长度为 \(n\) 的字符串 \(S\) 和一个长度为 \(m\) 的字符串\(T\) ,\(1\le m\le n\ ...
- CF R 635 div2 1337D Xenia and Colorful Gems 贪心 二分 双指针
LINK:Xenia and Colorful Gems 考试的时候没想到一个很好的做法. 赛后也有一个想法. 可以考虑答案的样子 x,y,z 可以发现 一共有 x<=y<=z,z< ...
- 【前行&赛时总结】◇第4站&赛时9◇ CF Round 513 Div1+Div2
◇第4站&赛时9◇ CF Round 513 Div1+Div2 第一次在CF里涨Rating QWQ 深感不易……作blog以记之 ( ̄▽ ̄)" +Codeforces 的门为你打 ...
- CF 983B XOR-pyramid(区间dp,异或)
CF 983B XOR-pyramid(区间dp,异或) 若有一个长度为m的数组b,定义函数f为: \(f(b) = \begin{cases} b[1] & \quad \text{if } ...
- CF 149D Coloring Brackets 区间dp ****
给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2.每对括号必须只能给其中的一个上色 3.相邻的两个不能上同色,可以都不上色 求0-len-1这一区间内 ...
- Codeforces Round #354 (Div. 2)-C. Vasya and String,区间dp问题,好几次cf都有这种题,看来的好好学学;
C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input standard ...
- CF 149D Coloring Brackets(区间DP,好题,给配对的括号上色,求上色方案数,限制条件多,dp四维)
1.http://codeforces.com/problemset/problem/149/D 2.题目大意 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色, ...
- topcoder srm 635 div1
problem1 link 首先枚举长度$L$.然后计算每一段长度$L$的差值最大公约数,然后差值除以最大公约数的结果可以作为当前段的关键字.然后不同段就可以比较他们的关键字,一样就是可以转化的. p ...
- CF Round 542 Div1.
B. Wrong Answer 构造一个长度为 2000 的数组,满足最大“子段和 $\times$ 子段长度”比最大子段和刚好大 k sol: 一个比较好的构造方法: 令数组总和为 $S$,然后构造 ...
随机推荐
- 轻松让HTML5可以显示桌面通知Notification非常实用
使用Notification的流程 1.检查浏览器是否支持Notification2.检查浏览器的通知权限3.如果权限不够则申请获取权限4.创建消息通知5.展示消息通知 Notification AP ...
- css sprites(精灵图)如何使用?
CSS Sprites是一种性能优化技术,一种网页图片应用处理方式:将多个图像组合成单个图像文件以在网站上使用的方法,以提高性能:也被称为css 精灵图. 网页通常包含多个图像.这些包括图标,按钮,徽 ...
- 网页开发中利用CSS以图换字的多中实现方法总汇
在h1标签中,新增span标签来保存标题内容,然后将其样式设置为display:none <style> h1 { width: 64px; height: 64px; backgroun ...
- css完美解决网页在iphoneX的头部刘海显示问题
一.解决iphonX白条,网站扩展到整个屏幕 网页在iphoneX的浏览器屏幕显示上,默认情况下在头部的2侧会出现白条背景,网站被限制在了一个“安全区域”内,移除白色背景的方法 方法一:设置body的 ...
- 总结《深入理解JVM》 G1 篇
注:一下内容主要结合<深入理解JVM>3th总结而来. 接上一篇,我们来说说G1,G1作为现在的主要的JVM GC,被作为各大互联网主要使用的垃圾回收器,了解G1回回收原理和回收过程,才能 ...
- 一道题理解setTimeout,Promise,async/await以及宏任务与微任务
今天看到这样一道面试题: //请写出输出内容 async function async1() { console.log('async1 start'); await async2(); consol ...
- Python之 爬虫(二十三)Scrapy分布式部署
按照上一篇文章中我们将代码放到远程主机是通过拷贝或者git的方式,但是如果考虑到我们又多台远程主机的情况,这种方式就比较麻烦,那有没有好用的方法呢?这里其实可以通过scrapyd,下面是这个scrap ...
- 接口测试框架实战(三)| JSON 请求与响应断言
关注公众号,获取测试开发实战干货合辑.本文节选自霍格沃兹<测试开发实战进阶>课程教学内容. 数据驱动就是通过数据的改变驱动自动化测试的执行,最终引起测试结果的改变.简单来说,就是参数化在自 ...
- CSS数据样式
CSS数据样式 表格 定制表格 我们除了可以使用<table>标签进行绘制表格,在css3中display也支持进行表格的样式绘制. 样式规则 说明 table 对应 table tabl ...
- Cyber Security - Palo Alto Basic Introduction
Preparation of the Lab Environment: Download and Install Pan-OS from the following website https://d ...