【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 ...
随机推荐
- 51nod 1074 约瑟夫环 V2
N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人重新从1开始报数.问最后剩下的人的编号. 例如:N = 3,K = 2.2号先出列,然后是1号,最后剩下的是3号. ...
- 使用JSON Web Token设计单点登录系统
用户认证八步走 所谓用户认证(Authentication),就是让用户登录,并且在接下来的一段时间内让用户访问网站时可以使用其账户,而不需要再次登录的机制. 小知识:可别把用户认证和用户授权(Aut ...
- 2017ACM暑期多校联合训练 - Team 1 1003 HDU 6035 Colorful Tree (dfs)
题目链接 Problem Description There is a tree with n nodes, each of which has a type of color represented ...
- python3爬虫.4.下载煎蛋网妹子图
开始我学习爬虫的目标 ----> 煎蛋网 通过设置User-Agent获取网页,发现本该是图片链接的地方被一个js函数代替了 于是全局搜索到该函数 function jandan_load_im ...
- python 输出 a+b
AC代码: 单组输入: s=input().split() print(int(s[0])+int(s[1]))
- var_dump打印出来格式太乱 怎么调
var_dump()和print_r() 输出的都是文本格式,在浏览器中就是这样如果你加载了 xdebug 扩展,那么 var_dump() 就会以 html 格式输出
- Opencv 配置VS2012
开始接触图像处理有一段时间了,经过前期的调研,和相关入门知识的学习,开始接触一些图像处理应用的工具.Opencv是一个图像处理的开源库,由于其开放的协议架构,国内外很多科研机构和团队都在基于openc ...
- centos7-sar工具的安装过程及其简单应用
一.sar工具安装 1.进入yum配置文件目录: cd /etc/yum.repos.d/ 2.vi CentOS-Base.repo命令创建文件CentOS-Base.repo 文件内容见网页:ht ...
- 关于"轉淚點"与"轉捩點"
经常看台湾偶像剧或台湾综艺节目的人,一定听过"转泪点"这个词,虽然我一直不知道这三个字具体是怎么写, 但其意思很容易明白,就是"转折点"的意思.今天无聊在看凤凰 ...
- spring data jpa条件分组查询及分页
原book对象 package com.shaying.domain; import javax.persistence.Column; import javax.persistence.Entity ...