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

f[i][j][k][p]表示i到j是否可以表示第k个字符串的前p个字符。
c[i][j]表示i到j是否可以全部删去。
有两种转移‘
f[j-1][k][p-1]&&st[k][p]==S[j]
f[d][k][p]&&c[d+1][j]
类似区间dp的东西可以采用固定一端,枚举另一端的方法
#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>

#define ll long long#define inf 1e9#define eps 1e-10#define md#define Nusing namespace std;bool f[170][35][25],c[170][170];int dp[170],len[35];char S[170],st[35][25];int main(){   scanf("%s",S+1); int lth=strlen(S+1);    int n;    scanf("%d",&n); for (int i=1;i<=n;i++) {     scanf("%s",st[i]+1);       len[i]=strlen(st[i]+1); } for (int i=lth;i;i--)    {     memset(f,0,sizeof(f));        for (int k=1;k<=n;k++)       f[i-1][k][0]=1;        for (int j=i;j<=lth;j++)       {         for (int k=1;k<=n;k++)             for (int p=1;p<=len[k];p++)                    f[j][k][p]|=(f[j-1][k][p-1]&&st[k][p]==S[j]);          for (int d=i;d<=j;d++)           if (c[d+1][j])           {               for (int k=1;k<=n;k++)                for (int p=1;p<=len[k];p++)                  f[j][k][p]|=f[d][k][p];           }       }     for (int j=i;j<=lth;j++)         for (int k=1;k<=n;k++)           c[i][j]|=f[j][k][len[k]];    } for (int i=1;i<=lth;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\n",dp[lth]); return 0;}

bzoj 2121 字符串游戏相关推荐

  1. bzoj 2121 字符串游戏(字符串dp)

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

  2. BZOJ 2121: 字符串游戏

    这道题太腻害辣..我太菜了想不出来.. 看了题解之后 还是有点懵.. 你们可以去看看这位大神的 点击打开链接 首先 我们定义状态 f[i][j][k][l]表示字符串区间[i,j]匹配到第k个小串的第 ...

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

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

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

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

  5. bzoj2121 字符串游戏

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

  6. 纪中20日c组模拟赛T1 2121. 简单游戏

    T1 2121. 简单游戏 (File IO): input:easy.in output:easy.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto Pro ...

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

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

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

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

  9. BZOJ 3277 串 BZOJ 3473 字符串 (广义后缀自动机、时间复杂度分析、启发式合并、线段树合并、主席树)...

    标签那么长是因为做法太多了... 题目链接: (bzoj 3277) https://www.lydsy.com/JudgeOnline/problem.php?id=3277 (bzoj 3473) ...

最新文章

  1. linux 安装删除命令,Linux如何使用命令行卸载安装包
  2. 一些少见的下载地址(按需求更新)
  3. 【一篇文章搞懂】dockerfile构建镜像的命令
  4. JDK 命令之 jar -- 压缩/解压缩工具
  5. Java8 基础数据类型包装类-Long
  6. (转)Spring Boot(七):Mybatis 多数据源最简解决方案
  7. ant root环境配置_Java ant环境变量配置
  8. efi分区咋移动到c盘里_快速增加C盘容量的好方法!
  9. 为什么会出现“无法连接服务器-与网络有关或与实例有关的错误”?
  10. 高校教材:计算机网络技术与应用,《网络技术与应用》计算机网络-教材-高等学校.pdf...
  11. ubuntu 12.04 修改 grub 启动参数
  12. 小程序获取微信登陆用户
  13. docker端口映射失败解决方法
  14. 亚马逊EC2服务器链接方式
  15. 折弯机使用说明书_折弯机操作图解法-如何使用折弯机
  16. java 百家姓_java判断姓是否合格 百家姓
  17. 机器学习自动化 要学习什么_自动化机器学习的现状
  18. 【网页制作】CSS尺寸样式属性
  19. 详解转换说明%-3d、%3d、%nd、%*2d、%0nd、%0.1f、%5.1f、%*d等含义
  20. Spark 安装配置及下载地址

热门文章

  1. 微信公众平台接口调试工具json格式不对怎么搞_腾讯云和微信推出更快速的小程序开发平台,微信读书小程序作示范...
  2. JavaScript的DOM知识点总结
  3. AndroidManifest.xml解析
  4. winmail 数据库设置_Windows - 2003下搭建邮件服务器教程和使用 - Winmail - Server - 轻松架设邮件服务器 - 图文...
  5. 双栈路由Linux,IPV6 IPV4双栈互通与静态路由
  6. LPL2020夏季常规赛7月22日RW vs ES,WE vs BLG前瞻预测
  7. 【论文翻译】UniT: Unified Knowledge Transfer for Any-Shot Object Detection and Segmentation
  8. Docker 核心技术(2)- helloworld 镜像
  9. 如何用大数据进行甜品店选址要素分析
  10. hiho 挑战赛16 A.王胖浩与三角形