【BZOJ 2121】字符串游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=2121
dp,设\(f(i,j,k,l)\)表示原串i到j这个子串能否被删成第k个串的长度为l的前缀。
再设\(can(i,j)\)表示原串i到j这个子串能否被删成空串,用can这个状态来加速f的转移即可。
时间复杂度\(O(|L|^3|S||p|)\),区间dp的转移都很少,所以可以过。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int L = 160;
const int N = 43;
const int p = 33;
bool f[L][L][N][p], can[L][L];
int n, len[N], Slen, dp[L];
char s[N][p], S[L];
int main() {
scanf("%s", S + 1);
Slen = strlen(S + 1);
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%s", s[i] + 1);
len[i] = strlen(s[i] + 1);
}
for (int i = Slen; i >= 1; --i)
for (int j = i; j <= Slen; ++j) {
for (int k = 1; k <= n; ++k) {
f[i][i - 1][k][0] = true;
for (int l = 1; l <= len[k] && l <= j - i + 1; ++l) {
f[i][j][k][l] |= f[i][j - 1][k][l - 1] && (s[k][l] == S[j]);
for (int tmp = i; tmp < j; ++tmp) f[i][j][k][l] |= f[i][tmp][k][l] && can[tmp + 1][j];
}
}
for (int k = 1; k <= n; ++k)
if (f[i][j][k][len[k]]) {
can[i][j] = true;
break;
}
}
for (int i = 1; i <= Slen; ++i) {
dp[i] = dp[i - 1] + 1;
for (int j = i; j >= 1; --j)
if (can[j][i])
dp[i] = min(dp[i], dp[j - 1]);
}
printf("%d\n", dp[Slen]);
return 0;
}
【BZOJ 2121】字符串游戏的更多相关文章
- 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 2121】 (字符串DP,区间DP)
2121: 字符串游戏 Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,B ...
- BZOJ2121: 字符串游戏(DP)(字符串删单词,求最多可以删去多少)
2121: 字符串游戏 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 672 Solved: 376[Submit][Status][Discuss ...
- BZOJ2121 字符串游戏
Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其 他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删 ...
- 20181228 模拟赛 T3 字符串游戏 strGame 博弈论 字符串
3 字符串游戏(strGame.c/cpp/pas) 3.1 题目描述 pure 和 dirty 决定玩 T 局游戏.对于每一局游戏,有n个字符串,并且每一局游戏由K轮组成.具体规则如下:在每一轮 ...
- 纪中20日c组模拟赛T1 2121. 简单游戏
T1 2121. 简单游戏 (File IO): input:easy.in output:easy.out 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 Goto Pro ...
- QuickHit项目(输出字符串游戏)
public class leve { private int leveNo; private int strLength; private int strTimes; private int tim ...
- [BZOJ]1059 矩阵游戏(ZJOI2007)
虽然说是一道水题,但小C觉得还是挺有意思的,所以在这里mark一下. Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白 ...
随机推荐
- 【BZOJ】2331: [SCOI2011]地板 插头DP
[题意]给定n*m的地板,有一些障碍格,要求用L型的方块不重不漏填满的方案数.L型方块是从一个方格向任意两个相邻方向延伸的方块,不能不延伸.n*m<=100. [算法]插头DP [题解]状态0表 ...
- 【BZOJ】1176: [Balkan2007]Mokia
[题意]n*n的矩阵,初始值为0(题面有误),m次操作,增加一个格子的权值,或查询子矩阵和.n<=2*10^6.(m应该较题面所述偏大). [算法]CDQ分治(算法知识见数据结构) [题解]三维 ...
- Go语言 5 函数
文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/ 今天,我们来学习Go语言编程的第五章,函数.首先简单说一下函数的概念和作用.函数是一 ...
- KEA128单片机启动代码分析
;/*****************************************************************************; * @file: startup_SK ...
- Perl6多线程4: Promise allof / anyof
allof : 所有代码块执行完成后才退出 anyof :只要有一个代码块执行完后就马上退出 要配合 await 一起用: my $p = start {say 'a'}; ;say 'b';} ...
- Msql中的触发器
解发器 当执行某种操作时解发的行为. 比如, 当表变动时触发的动作. 像商城订单, 当下单时, 库存减少. 语法: create trigger trigger_name after/befor in ...
- 4-Python数据类型之元组-字符串
目录 1 元组概念 1.1 元祖的特点 1.2 元组的定义 1.3 元组的访问 1.4 元组的查询 2 命名元组 3 字符串 3.1 字符串的基本操作 3.1.1 字符串的访问 3.1.2 字符串的拼 ...
- Git远程操作详解【转】
转自:http://www.ruanyifeng.com/blog/2014/06/git_remote.html 作者: 阮一峰 日期: 2014年6月12日 Git是目前最流行的版本管理系统,学会 ...
- Redis使用详细教程【转】
转自 Redis使用详细教程 - wangyuyu - 博客园http://www.cnblogs.com/wangyuyu/p/3786236.html 一.Redis基础部分: 1.redis介绍 ...
- weblogic12.1.3 静默安装 建域
--安装依赖包 yum -y install compat-libcap1 compat-libstdc++ gcc gcc-c++ glibc-devel libaio-devel libstdc+ ...