Description

BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删除,如果删除,则将删除后L分裂成的左右两部分合并。举个例子,L=’abcdefg’ , S={‘de’},如果BX选择将’de’从L中删去,则删后的L=’abcfg’。现在BX可以进行任意多次操作(删的次数,顺序都随意),他想知道最后L串的最短长度是多少。

Input

输入的第一行包含一个字符串,表示L。第二行包含一个数字n,表示集合S中元素个数。以下n行,每行一个字符串,表示S中的一个元素。输入字符串都只包含小写字母。

Output

输出一个整数,表示L的最短长度。

Sample Input

aaabccd

3

ac

abc

aaa

Sample Output

2

【样例说明】

aaabccd

aacd

ad

做这种题真是毫无头绪……最后还是看了各种大佬的题解……
转移因为比较复杂所以由三部分组成:辅助辅助数组f和辅助数组c都需要预处理,然后再通过dp数组得出答案

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;char L[155], s[35][35];
int n, m, len[35];
int c[155][155], f[155][155][35][35], dp[155];int main() {scanf("%s", L + 1);n = strlen(L + 1);scanf("%d", &m);for(int i = 1; i <= m; i ++) {scanf("%s", s[i] + 1);len[i] = strlen(s[i] + 1);}for(int i = n; i >= 1; i --)for(int j = i; j <= n; j ++) {if(i == j)for(int a = 1; a <= m; a ++)f[i][i][a][1] = (L[i] == s[a][1]);  elsefor(int a = 1; a <= m; a ++)for(int b = 1; b <= len[a]; b ++) {if(f[i][j - 1][a][b - 1] && (L[j] == s[a][b]))f[i][j][a][b] = 1;for(int k = i; k <= j; k ++)if(f[i][k][a][b] && c[k + 1][j])f[i][j][a][b] = 1;}   for(int a = 1; a <= m; a ++)c[i][j] |= f[i][j][a][len[a]];}for(int i = 1; i <= n; i ++) {dp[i] = dp[i - 1] + 1;for(int j = 1; j <= i; j ++)if(c[j][i])dp[i] = min(dp[i], dp[j - 1]);}   printf("%d", dp[n]);return 0;
}

bzoj 2121 字符串游戏(字符串dp)相关推荐

  1. BZOJ2121 字符串游戏 【dp】

    题目链接 BZOJ2121 题解 dp怎么那么神呐QAQ 我们要求出最小字符串长度 我们设一个\(dp[i]\)表示前\(i\)个字符最后所形成的最短字符串长度 对于第\(i\)个字符,要么保留,就是 ...

  2. [BZOJ2121]-字符串游戏-字符串dp

    说在前面 觉得字符串dp都很神 题目 BZOJ2121传送门 看题可戳传送门 解法 首先me是看了dp定义才会做这道题的 这题-.me貌似写不出来思维过程,只能把做法说一说了,可能相关题目做多了之后会 ...

  3. bzoj 2121 字符串游戏

    BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删除,如果删除,则将删除后L ...

  4. bzoj2121 字符串游戏

    题目链接:bzoj2121 题目大意: BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,BX就可以 ...

  5. .net mvc actionresult 返回字符串_字符串游戏之无效的身份证

    出场人物介绍 小美:小学4年级学生,参加了学校的编程兴趣小组,已经了解了Python语言的基本语法,能够看懂一些简单的程序.她做事风风火火,对所有的事情都很好奇,喜欢打破砂锅问到底,是一个叫人又爱又恨 ...

  6. 51Nod 1092 回文字符串(LCS + dp)

    51Nod 1092 数据结构暑假作业上出现的一题,学习了一下相关算法之后,找到了oj测试能AC. 1.回文串是一种中心对称的结构,这道题可以转变为求最长回文子序列长度的题目.(子序列:可以不连续) ...

  7. python 路径拼接字符串_字符串游戏之拼接字符串

    出场人物介绍 小美:小学4年级学生,参加了学校的编程兴趣小组,已经了解了Python语言的基本语法,能够看懂一些简单的程序.她做事风风火火,对所有的事物都很好奇,喜欢打破砂锅问到底,是一个叫人又爱又恨 ...

  8. 【2022 省选训练赛 Contest 17 A】字符串游戏(结论)

    字符串游戏 题目链接:2022 省选训练赛 Contest 17 A 题目大意 有一个字符串一开始是空的,两个人轮流操作在任意位置插入 0/1. 然后给你一个串 s,先手目标是使得 s 是字符串的子串 ...

  9. python身份证的秘密_Python算法之旅字符串游戏之身份证号的秘密

    最近在力扣(LeetCode)网闲逛,发现很多题目的官方题解都是用Python语言来描述的,这说明大家已经逐渐认识到Python语言描述算法的优越性:它语法简明,内置函数丰富,表述直截了当,可以用最简 ...

最新文章

  1. git克隆 不带目录_Git 系统学习笔记
  2. MPTCP 源码分析(五) 接收端窗口值
  3. centos普通用户设置sudo权限
  4. 团队计划(5.25)
  5. 《喜剧之王》- 24/7 - Cagnet
  6. 自动控制matlab实验,自动控制matlab实验.doc
  7. filter-mutate过滤插件
  8. 无需再忙了:Lambda-S3缩略图,由SLAppForge Sigma钉牢!
  9. JBoss AS7 JNDI和EJB 3.1命名更改
  10. 2017.09.21学习总结
  11. JVM 调优 2:GC 如何判断对象是否为垃圾,三色标记算法应用原理及存在的问题?
  12. java 并发框架源码_某网Java并发编程高阶技术-高性能并发框架源码解析与实战(云盘下载)...
  13. 不服不行!java编程思想第六版下载
  14. SQL server置疑数据库修复
  15. WIN8 RP版频繁死机
  16. mybatis-plus lambda表达式学习笔记
  17. MATLAB代码:基于非对称纳什谈判的多微网电能共享运行优化策略
  18. 自动化测试全套资料都在这里了,请查收(吐血整理)
  19. usrp b210 参数记录
  20. 支持向量机(二)——松弛变量处理异常点

热门文章

  1. 「镁客·请讲」Video++董慧智:让AI融入消费级视频,我们打开了视频的“黑盒子”...
  2. c语言单招程序设计解析,学生教学论文,关于单招C语言程序设计教学方法探究相关参考文献资料-免费论文范文...
  3. 解决Webstorm通过Chrome无法调用JB插件调试的问题
  4. 在macOS上交叉编译arm64的程序并在IOS上运行
  5. Vue实现图形化积木式编程(十一)
  6. 且看一个IT女孩的求职之路
  7. [2008-05-26]我的梦
  8. 计算机cpu和显卡的搭配要求,CPU和显卡怎么搭配好 显卡和CPU搭配有什么要求吗...
  9. UE中渲染自发光通道的折衷方案
  10. Bypassing PatchGuard on Windows x64