字符串+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 ...
随机推荐
- js实现下拉框
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Map获取键值,Map的几种遍历方法 (转载)
Map类提供了一个称为entrySet()的方法,这个方法返回一个Map.Entry实例化后的对象集.接着,Map.Entry类提供了一个getKey()方法和一个getValue()方法,Map.E ...
- Spring Cloud Feign设计原理
什么是Feign? Feign 的英文表意为“假装,伪装,变形”, 是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直 ...
- linux格式化磁盘
linux格式化磁盘 查看系统磁盘情况 [root@db02 ~]# fdisk -l #查看当前系统上所有存储设备(包括挂在和没挂载的) 注:如果没有管理员权限是看不见磁盘的,因为fdisk默认读 ...
- Web UI 设计(网页设计)命名规范
Web UI 设计命名规范 一.网站设计及基本框架结构: 1. Container“container“ 就是将页面中的所有元素包在一起的部分,这部分还可以命名为: “wrapper“, “wr ...
- 国行iphone第一次安装APP网络状况
国行手机第一次安装APP,会有请求网络权限的一个弹框出现,在这期间APP是没有任何网络连接的. 想必大部分APP的需求和这个逻辑有冲突. 先推荐一个链接:http://www.cocoachina.c ...
- (转)Google Protocol Buffer 的使用和原理
转自:https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/index.html 简介 什么是 Google Protocol Buffer? ...
- python库之lightgbm
一.安装 https://blog.csdn.net/qq_40317897/article/details/81021958 参考文献: [1].LightGBM中文文档 https://light ...
- PHP算法之增减字符串匹配
给定只含 "I"(增大)或 "D"(减小)的字符串 S ,令 N = S.length. 返回 [0, 1, ..., N] 的任意排列 A 使得对于所有 i ...
- python的object(转)
原文章:https://www.cnblogs.com/sesshoumaru/p/6042322.html 1. object类是Python中所有类的基类,如果定义一个类时没有指定继承哪个类,则默 ...