【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黑白 ...
 
随机推荐
- 【CodeForces】901 B. GCD of Polynomials
			
[题目]B. GCD of Polynomials [题意]给定n,要求两个最高次项不超过n的多项式(第一个>第二个),使得到它们GCD的辗转次数为n.n<=150. [算法]构造 [题解 ...
 - ADO.NET中带参数的Sql语句的陷阱
			
1.使用Parameter //利用构造函数方式 ,不推荐这样写 Parameter p =new Parameter("@id",值); cmd.Parameters.Add(p ...
 - python学习笔记(十五)之集合
			
集合:对应数学中的集合类型.集合中的元素是唯一,且无序的. 创建集合 方法一:使用{},注意python会自动删除重复元素 >>> number = {1,2,3,4,3,2,1} ...
 - 关于angularJS的一些用法
			
AngularJS 事件指令: ng-click/dblclick ng-mousedown/up ng-mouseenter/leave ng-mousemove/over/out ng-keydo ...
 - WebStorm 2016激活
			
最近在网上找到一个激活webStorm 的好东西.博主说对jetbrains下的所有产品都是可以用这种方式激活的...如:PhpStorm,IntelliJ JDEA等. 但别的产品我没有试过.对于w ...
 - 将neuroph导入到Eclipse中
			
1.下载neuroph 网址:http://neuroph.sourceforge.net/ 本人选择的是2.8版本 2.解压文件 本人解压至:D:\neuroph-2.8 3.neuroph jar ...
 - NEO发行资产Token
			
NEO注册发行全局资产(Token 和 Share)功能已经在neo-gui里面集成,发行非常方便, 高级-注册资产 注册Token消耗GAS感人 4990 Gas 点击调用,获取交易ID为资产ID ...
 - linux下C语言实现多线程通信—环形缓冲区,可用于生产者(producer)/消费者(consumer)【转】
			
转自:http://blog.chinaunix.net/uid-28458801-id-4262445.html 操作系统:ubuntu10.04 前言: 在嵌入式开发中,只要是带操作系统的 ...
 - Centos 6.4搭建git服务器【转】
			
前阵子公司需要,让我搭个Git服务器,把之前用的SVN上代码迁移到git上去,所以就在阿里云主机上搭了一个,记录了下安装过程,留存文档以备查阅.本篇本章只涉及搭建部分的操作,更多git的使用可以参考文 ...
 - Ubuntu下安装Python3.6并在终端输入Python就能显示Python3.6
			
Ubuntu17.04自带Python2.7与Python3.5.3的版本,由于Python2与Python3有着一些差距可能需要安装更新Python3的版本,并且切换默认的Python解释器. ...