2121: 字符串游戏

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

对于100%数据,满足|L|<151,|S|<31,S中的每个元素|p|<21

HINT

Source

【分析】

  感觉我的字符串DP弱弱的。

  数据很小。。。

  所以,。。

  

  令dp[i][j][k][l]表示母串中左端点为i,右端点为j,能否删到只剩下第k个字符串的前l位,ok[i][j]表示母串i~j能否删完,显然有ok[i][j]=dp[i][j][k][len[k]]的并。

  两种情况转移一下即可。

  大神的压后面的做法好美丽!

  http://blog.csdn.net/lych_cys/article/details/51164134

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define Maxl 160 int n,m,len[],bin[];
int p[Maxl][],dp[Maxl][];
int f[Maxl];
char s[Maxl],a[][];
bool ok[Maxl][]; int mymin(int x,int y) {return x<y?x:y;} int main()
{
scanf("%s",s+); m=strlen(s+);
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%s",a[i]+); len[i]=strlen(a[i]+);
}
bin[]=;
for(int i=;i<=;i++) bin[i]=bin[i-]<<;
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
for(int k=;k<=len[j];k++) if(s[i]==a[j][k]) p[i][j]|=bin[k]; for (int i=m;i>=;i--)
{
for(int j=;j<=n;j++) dp[i-][j]=;
for(int j=i;j<=m;j++)//i~j
{
for(int k=;k<=n;k++)
{
dp[j][k]=(dp[j-][k]<<)&p[j][k];
for(int l=i;l<j;l++) if(ok[l+][j]) dp[j][k]|=dp[l][k];
if(dp[j][k]&bin[len[k]]) ok[i][j]=;
}
}
}
for(int i=;i<=m;i++)
{
f[i]=f[i-]+;
for(int j=;j<=i;j++) if(ok[j][i])
f[i]=mymin(f[i],f[j-]);
}
printf("%d\n",f[m]);
return ;
}

2017-03-20 10:26:02

【BZOJ 2121】 (字符串DP,区间DP)的更多相关文章

  1. BZOJ 2121: 字符串游戏 区间DP + 思维

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

  2. BZOJ#2121. 字符串游戏 [区间dp]

    // powered by c++11 // by Isaunoya #include<bits/stdc++.h> #define rep(i , x , y) for(register ...

  3. BZOJ 1090 字符串折叠(区间DP)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1090 题意:字符串AAAAAAAAAABABABCCD的最短折叠为9(A)3(AB)CC ...

  4. 洛谷 1063 dp 区间dp

    洛谷 1063 dp 区间dp 感觉做完这道提高组T1的题之后,受到了深深的碾压,,最近各种不在状态.. 初看这道题,不难发现它具有区间可并性,即(i, j)的最大值可以由(i, k) 与 (k+1, ...

  5. BZOJ 1260&UVa 4394 区间DP

    题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...

  6. 【BZOJ-1090】字符串折叠 区间DP + Hash

    1090: [SCOI2003]字符串折叠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1127  Solved: 737[Submit][Stat ...

  7. 洛谷P4302 [SCOI2003]字符串折叠(区间dp)

    题意 题目链接 Sol 裸的区间dp. 转移的时候枚举一下断点.然后判断一下区间内的字符串是否循环即可 `cpp #include<bits/stdc++.h> #define Pair ...

  8. 【bzoj2121】字符串游戏 区间dp

    题目描述 给你一个字符串L和一个字符串集合S,如果S的某个子串在S集合中,那么可以将其删去,剩余的部分拼到一起成为新的L串.问:最后剩下的串长度的最小值. 输入 输入的第一行包含一个字符串,表示L. ...

  9. BZOJ 1055 玩具取名(区间DP)

    很显然的区间DP,定义dp[i][j][k], 如果dp[i][j][k]=1表示字符串[i,j]可以组成k字符. # include <cstdio> # include <cst ...

  10. bzoj 1068 [SCOI2007]压缩 区间dp

    [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1644  Solved: 1042[Submit][Status][Discu ...

随机推荐

  1. 从零搭建SSM框架(三)SSM框架整合

    整合思路 1.Dao层: Mybatis的配置文件:SqlMapConfig.xml 不需要配置任何内容,需要有文件头.文件必须存在. applicationContext-dao.xml: myba ...

  2. jQuery插件ASP.NET应用之AjaxUpload

    本次使用AJAXUPLOAD做为上传客户端无刷上传插件,其最新版本为3.9,官方地址:http://valums.com/ajax-upload/ 在页面中引入 jquery.min.1.4.2.js ...

  3. CSS浏览器兼容问题集-第三部分

    FF与IE 1. Div居中问题 div设置 margin-left, margin-right 为 auto 时已经居中,IE 不行,IE需要设定body居中,首先在父级元素定义text-algin ...

  4. Django之ModelForm(二)-----ModelForm组件

    a.  class Meta:             model,                           # 对应Model的             fields=None,     ...

  5. Django之组合搜索组件(一)

    什么是组合搜索呢? 比如你想买车,但手里只有10万块!所以你只能在10万块的车里挑选,但你喜欢黑色,因为觉得很高端大气上档次,说白了就是装逼杠杠的!之后售车姐给你拿了个表表,你看到了低于10万块且颜色 ...

  6. 用js拼接url为pathinfo模式

    用js拼接url为pathinfo模式

  7. Ubuntu 上更新 Flash 插件

    2018-02-19 12:08:28 更新: 现在的 Google Chrome 浏览器自带了 Flash 支持,无需安装.而 Firefox 浏览器没有提供 Flash 支持,所以用 Firefo ...

  8. koa中间层 文件下载的请求转发

    背景: 前端用a标签发起下载文档的get请求 node中间层接到get请求后将请求转发到java后端 java后端返回文档流传递给node中间层 好处: 后端的java业务逻辑层接口.数据库不向外部暴 ...

  9. iTextSharp操作pdf之pdfCreater

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. AttributeError: 'str' object has no attribute 'decode'

    ue = e.decode('latin-1')修改为: ue = e.encode('ascii', 'strict')