【BZOJ 2121】 (字符串DP,区间DP)
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
aaaSample 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)的更多相关文章
- BZOJ 2121: 字符串游戏 区间DP + 思维
Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对 于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删 ...
- BZOJ#2121. 字符串游戏 [区间dp]
// powered by c++11 // by Isaunoya #include<bits/stdc++.h> #define rep(i , x , y) for(register ...
- BZOJ 1090 字符串折叠(区间DP)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1090 题意:字符串AAAAAAAAAABABABCCD的最短折叠为9(A)3(AB)CC ...
- 洛谷 1063 dp 区间dp
洛谷 1063 dp 区间dp 感觉做完这道提高组T1的题之后,受到了深深的碾压,,最近各种不在状态.. 初看这道题,不难发现它具有区间可并性,即(i, j)的最大值可以由(i, k) 与 (k+1, ...
- 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 ...
- 【BZOJ-1090】字符串折叠 区间DP + Hash
1090: [SCOI2003]字符串折叠 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1127 Solved: 737[Submit][Stat ...
- 洛谷P4302 [SCOI2003]字符串折叠(区间dp)
题意 题目链接 Sol 裸的区间dp. 转移的时候枚举一下断点.然后判断一下区间内的字符串是否循环即可 `cpp #include<bits/stdc++.h> #define Pair ...
- 【bzoj2121】字符串游戏 区间dp
题目描述 给你一个字符串L和一个字符串集合S,如果S的某个子串在S集合中,那么可以将其删去,剩余的部分拼到一起成为新的L串.问:最后剩下的串长度的最小值. 输入 输入的第一行包含一个字符串,表示L. ...
- BZOJ 1055 玩具取名(区间DP)
很显然的区间DP,定义dp[i][j][k], 如果dp[i][j][k]=1表示字符串[i,j]可以组成k字符. # include <cstdio> # include <cst ...
- bzoj 1068 [SCOI2007]压缩 区间dp
[SCOI2007]压缩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1644 Solved: 1042[Submit][Status][Discu ...
随机推荐
- mysql 修改密码的几种方式
第一种方式: 最简单的方法就是借助第三方工具Navicat for MySQL来修改,方法如下: 1.登录mysql到指定库,如:登录到test库. 2.然后点击上方“用户”按钮. 3.选择要更改的用 ...
- 基于 Express+Gulp+BrowserSync 搭建一套高性能的前端开发环境
基于 Express+Gulp+BrowserSync 搭建一套高性能的前端开发环境 Express 是比较经典的,也是最常用的 Nodejs Web框架. 一.Express 快速构建一个web应用 ...
- 分享一个彻底冻结对象的函数——来自阮一峰老师的《ECMAScript 6 入门》
var constantize = (obj) => { Object.freeze(obj); Object.keys(obj).forEach( (key, i) => { if ( ...
- Freemarker代码生成器原理说明
一.Freemarker基本原理: FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用 ...
- $file函数
引用:http://www.jb51.net/article/26508.htm 如: 复制代码代码如下: <form enctype="multipart/form-data&quo ...
- Spring Boot工程结构推荐
工程结构(最佳实践) Spring Boot框架本身并没有对工程结构有特别的要求,但是按照最佳实践的工程结构可以帮助我们减少可能会遇见的坑,尤其是Spring包扫描机制的存在,如果您使用最佳实践的工程 ...
- 【CF343D】 Water Tree(树链剖分)
题目链接 树剖傻逼题,练练手好久没写树剖了. 查询忘记\(pushdown\)抓了好久虫.. 全文手写,一遍过... #include <cstdio> const int MAXN = ...
- JWT机制了解
JWT简介 JSON Web Token(JWT)是一个开放式标准(RFC 7519),它定义了一种紧凑(Compact)且自包含(Self-contained)的方式,用于在各方之间以JSON对象安 ...
- 阿里分布式开源框架DUBBO 入门+ 进阶+ 项目实战视频教程
史诗级Java/JavaWeb学习资源免费分享 欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回 ...
- PHP深浅拷贝
举个栗子: <?php class Example1 { public $name; public function __construct($name) { $this->name = ...