【BZOJ5073】[Lydsy十月月赛]小A的咒语 DP(错解)
【BZOJ5073】[Lydsy十月月赛]小A的咒语
题解:沙茶DP,完全不用后缀数组。
用f[i][j]表示用了A的前i个字符,用了j段,最远能匹配到哪。因为显然我们能匹配到的地方越远越好,所以我们直接判断A[i]和B[f[i][j]]是否相等,如果相等则转移下去。还要记录g[i][j]表示第i个字符匹配成功时最远能匹配到哪,这样f数组可以求前缀最大值,但要从j转移到j+1,而g数组可以从j转移到j。
P.S:贪心策略好像有bug。。。大家还是写后缀数组吧。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=100010;
int n,m,K,T,ans;
char s1[maxn],s2[maxn];
int f[maxn][110],g[maxn][110];
void work()
{
scanf("%d%d%d%s%s",&n,&m,&K,s1,s2),ans=0;
int i,j;
memset(f,0,sizeof(f)),memset(g,0xc0,sizeof(g));
for(i=0;i<n;i++)
{
for(j=0;j<=K;j++)
{
if(f[i][j]==m||g[i][j]==m)
{
printf("YES\n");
return ;
}
f[i][j]=max(f[i][j],g[i][j]);
if(s1[i]==s2[f[i][j]]) g[i+1][j+1]=max(g[i+1][j+1],f[i][j]+1);
if(g[i][j]>=0&&s1[i]==s2[g[i][j]]) f[i+1][j+1]=max(f[i+1][j+1],g[i][j]+1),g[i+1][j]=max(g[i+1][j],g[i][j]+1);
f[i+1][j]=max(f[i+1][j],f[i][j]);
}
}
for(j=0;j<=K;j++) if(f[n][j]==m||g[n][j]==m)
{
printf("YES\n");
return ;
}
printf("NO\n");
}
int main()
{
scanf("%d",&T);
while(T--) work();
return 0;
}//1 9 6 3 hloyaygrt loyyrt
【BZOJ5073】[Lydsy十月月赛]小A的咒语 DP(错解)的更多相关文章
- 【BZOJ5072】[Lydsy十月月赛]小A的树 树形DP
[BZOJ5072][Lydsy十月月赛]小A的树 题解:考虑我们从一个联通块中替换掉一个点,导致黑点数量的变化最多为1.所以我们考虑维护对于所有的x,y的最大值和最小值是多少.如果询问的y在最大值和 ...
- 【BZOJ5074】[Lydsy十月月赛]小B的数字 数学
[BZOJ5074][Lydsy十月月赛]小B的数字 题解:题目是问你ai*bi>=sum,bi>=0这个不等式组有没有解.因为a<=10,容易想到取ai的lcm,然后变成lcm*b ...
- 【BZOJ5071】[Lydsy十月月赛]小A的数字 发现性质
[BZOJ5071][Lydsy十月月赛]小A的数字 题解:一般遇到这种奇奇怪怪的操作,常用的套路是将原序列差分一下,或者求个前缀和什么的.本题就是直接对原序列求前缀和,然后发现一次操作相当于交换两个 ...
- 【bzoj5071】[Lydsy十月月赛]小A的数字 乱搞
题目描述 有一串数字 A1,A2...An 每次可以进行如下操作,选择一个数字 i ,将 (Ai-1 , Ai , Ai+1) 变为 (Ai-1 + Ai , -Ai , Ai+1 + Ai) ,特别 ...
- 【bzoj5072】[Lydsy十月月赛]小A的树 树形背包dp
题解: 比较好想 首先注意到如果最暴力的做法复杂度无法接受 而5000的范围基本是n^2做法了 只使用已经遍历过的点数目和当前子树中的点数目转移我们知道复杂度是n^2的 于是大胆猜测一波同一个节点为根 ...
- 【bzoj5073】[Lydsy1710月赛]小A的咒语 后缀数组+倍增RMQ+贪心+dp
题目描述 给出 $A$ 串和 $B$ 串,从 $A$ 串中选出至多 $x$ 个互不重合的段,使得它们按照原顺序拼接后能够得到 $B$ 串.求是否可行.多组数据. $T\le 10$ ,$|A|,|B| ...
- 5073 [Lydsy1710月赛]小A的咒语
LINK:[Lydsy1710月赛]小A的咒语 每次给定两个串 要求从a串中选出x段拼成B串 能否做到.T组数据. \(n\leq 100000,m\leq 100000,T\leq 10,x\leq ...
- [BZOJ5073][Lydsy1710月赛]小A的咒语
bzoj description 你有一个\(A\)串和\(B\)串,你需要判断是否可以在\(A\)串中拆出\(x\)个互不相交的子串,使它们按顺序拼在一起可以组成\(B\)串. \(|A|,|B|\ ...
- [BZOJ5073] [Lydsy1710月赛]小A的咒语 后缀数组+dp+贪心
题目链接 首先这种题一看就是dp. 设\(dp[i][j]\)表示\(A\)序列中到\(i\)位之前,取了\(j\)段,在\(B\)中的最长的长度. 转移也比较简单 \[ dp[i][j] \to d ...
随机推荐
- Tomcat服务器配置https协议(Tomcat HTTPS/SSL 配置)
通常商用服务器使用https协议需要申请SSL证书,证书都是收费的,价格有贵的有便宜的.它们的区别是发行证书的机构不同,贵的证书机构更权威,证书被浏览器否决的几率更小. 非商业版本可以通过keytoo ...
- mysql中日期操作
1 获取当前时间 now() select now(); +---------------------+ | now() | +---------------------+ | -- :: | +-- ...
- ruby gem tips(转)
淘宝源: https://ruby.taobao.org 升级ruby gem gem update --system 查看gem版本 gem -v 查看gem版本,gems安装目录,remote s ...
- bash之局部变量与子shell(转载)
shell是每个接触linux.unix用户不得不会的工具,谈到shell就又联系到bash,因为这个shell是普遍被使用的.那么bash中的局部变量和子shell你是否能熟练掌握呢?这里推荐一本学 ...
- 运用 Range 对象处理 Word 文档内容
运用 Range 对象处理 Word 文档内容 在所有 Office 应用程序中,Microsoft Word 可能是应用最广泛的应用程序,它还经常在自定义 Office 解决方案中扮演重要的角色 ...
- Extjs DateField Bug 当format为年月'Y-m',在当前月(30、31号)选择其他偶数月会乱跳的问题解决方案
Ext.form.WMDateField = Ext.extend(Ext.form.DateField, { safeParse : function(value, format) { if (/[ ...
- 深度剖析ConcurrentHashMap(转)
概述 还记得大学快毕业的时候要准备找工作了,然后就看各种面试相关的书籍,还记得很多面试书中都说到: HashMap是非线程安全的,HashTable是线程安全的. 那个时候没怎么写Java代码,所以根 ...
- 记一次安装多版本php的四个雷区,你踩着了吗
记一次安装多版本php的四个雷区,你踩着了吗 技术小疯子关注3人评论740人阅读2018-06-29 15:00:30 记一次安装多版本的php的四个雷区,你踩着了吗 需求:公司需要在同一台服 ...
- iOS开发小技巧--键盘处理以及解决block造成循环引用的小技巧
- nginx的root alias 指令
location /img/ { alias /var/www/image/; } #若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件 ...