字符串+dp——cf1163D好题
很好的题(又复习了一波kmp)
/*
dp[i,j,k]:到s1的第i位,匹配s2到j,s3到k的最优解
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 2005
int len1,len2,len3,dp[maxn][][],f2[],f3[];
char s1[maxn],s2[],s3[]; void kmp(char *s,int *f){
int len=strlen(s);
int i,j;
j=f[]=-,i=;
while(i<len){
while(j!=- && s[i]!=s[j])j=f[j];
f[++i]=++j;
}
} int main(){
scanf("%s%s%s",s1+,s2,s3);
len1=strlen(s1+);len2=strlen(s2);len3=strlen(s3);
for(int i=;i<=;i++)
for(int j=;j<;j++)
for(int k=;k<;k++)
dp[i][j][k]=-0x3f3f3f3f;
int ans=-0x3f3f3f3f;
dp[][][]=;
kmp(s2,f2),kmp(s3,f3);
for(int i=;i<=len1;i++)
for(int j=;j<=len2;j++)//这里一定要等于
for(int k=;k<=len3;k++)//从[i-1,j,k]状态推导到当前状态
if(dp[i-][j][k]!=-0x3f3f3f3f){
char L='a',R='z';
if(s1[i]!='*')L=R=s1[i];
for(char ch=L;ch<=R;ch++){//枚举第i位选的是字符ch
//找选了ch在s2,s3的匹配位置
int p2=j,p3=k,tmp=;
while(p2!=- && s2[p2]!=ch)
p2=f2[p2];
p2++;
while(p3!=- && s3[p3]!=ch)
p3=f3[p3];
p3++; if(p2==len2)tmp++;
if(p3==len3)tmp--;
dp[i][p2][p3]=max(dp[i][p2][p3],dp[i-][j][k]+tmp);
if(i==len1)
ans=max(ans,dp[i][p2][p3]);
}
}
cout<<ans<<endl;
}
字符串+dp——cf1163D好题的更多相关文章
- AtCoder Regular Contest 081 E - Don't Be a Subsequence(字符串DP)
引用自:onion_cyc 字符串DP一直不是强项...以后没思路的题就想DP和网络流23333333 f[i]表示从i开始的后缀非子序列的最短长度 pos[i][j]表示从i开始的j字符最早出现位 ...
- 【BZOJ 2121】 (字符串DP,区间DP)
2121: 字符串游戏 Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,B ...
- NOIP2015Day2T2子串(字符串dp)
又被“if(a=b)”坑了QAQ...写C++还是得开Warning,这么久了pascal还没改过来咋回事啊QWQ 题目大意就不说了OWO 网上的题解都不怎么看得懂啊...好像写得都很乱?还是我太sb ...
- [NOIP2005] 过河【Dp,思维题,缩点】
Online Judge:Luogu P1052 Label:Dp,思维题,缩点,数学 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子 ...
- Codeforces 1150D(字符串dp)
反思 三维的dp压根没看出来,看题解以后思路又很直观,找几道字符串dp练练才行 序列自动机和优化一维略 /* __ __ * ____| |_____| |____ * | | * | __ | * ...
- 2017广东工业大学程序设计竞赛初赛 题解&源码(A,水 B,数学 C,二分 D,枚举 E,dp F,思维题 G,字符串处理 H,枚举)
Problem A: An easy problem Description Peter Manson owned a small house in an obscure street. It was ...
- [每日一题2020.06.09] leetcode #97 交错字符串 dp
题目链接 利用动态规划的思想, 对于每种状态(i, j)来说都有(i-1, j) 和 (i,j-1) 需要注意的问题 : 初始化的问题,先把i=0和j=0的状态都初始化后才可以进行dp否则发生数组越界 ...
- fzu2172 字符串dp
F - 巡了南山我巡北山 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- 51nod 1092 回文字符串 (dp)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1092 这个题是poj-3280的简化版,这里只可以增加字符,设 dp[i ...
随机推荐
- Delphi常用字符串函数
Delphi常用字符串函数 一.字符转换函数1.ord(input[i])返回字符表达式 input 左端起第 I 字符的ASCII 码值.2.CHAR()将ASCII 码转换为字符.如果没有输入 ...
- Spring Boot 启动,1 秒搞定!
Java技术栈 www.javastack.cn 优秀的Java技术公众号 原文: dev.to 翻译: ImportNew.com - 唐尤华译文: http://www.importnew.com ...
- mybatis 处理CLOB/BLOB类型数据
BLOB和CLOB都是大字段类型. BLOB是按二进制来存储的,而CLOB是可以直接存储文字的. 通常像图片.文件.音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去.文章或者是较长的文字 ...
- 【POJ】1182 食物链
这是<挑战设计程序竞赛>中的例题. 题目链接:http://poj.org/problem?id=1182 题意:中文题面.不赘述. 题解: 代码: //带权并查集 #include< ...
- mysql的几种启动方式
mysql的四种启动方式: 1.mysqld 启动mysql服务器:./mysqld --defaults-file=/etc/my.cnf --user=root 客户端连接: mysql --de ...
- CSS3——2D变形和3D变形
2D变形(CSS3) transform transform是CSS3中具有颠覆性的特征之一,可以实现元素的位移.旋转.倾斜.缩放,甚至支持矩阵方式,配合过渡和即将学习的动画知识,可以取代大量之前只能 ...
- rancher2.0 自定义应用商店(catalog)
1.进入自定义应用商店页面 ===================================================== ================================ ...
- 获取硬件信息的delphi源码CPUID、操作系统、Mac物理地址、计算机名称、IP地址、用户名
{-----------------------------------------------------------------------------作者:sushengmiyan 2013.0 ...
- C++在#include命令中,用〈 〉和“”有什么区别
使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找: 使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找.
- HDU - 1560 DNA sequence
给你最多8个长度不超过5的DNA系列,求一个包含所有系列的最短系列. 迭代加深的经典题.(虽然自己第一次写) 定一个长度搜下去,搜不出答案就加深大搜的限制,然后中间加一些玄学的减枝 //Twenty ...