当前位置: 首页 > news >正文

BZOJ2121 字符串游戏

想出来了一半,然后看了眼题解,果然还是和状压不熟导致的。

题目大意

给你一个字符串 L L L 和一个有 n n n 个字符串的集合 S S S,每次操作可以在 L L L 中选择一个子串,如果这个子串在集合 S S S 中,那么这个子串就会被删去,而 L L L 的剩余部分会拼接在一起。求最后 L L L 的长度最小可能是多少。

∣ L ∣ ≤ 150 |L|≤150 L150 n ≤ 30 n≤30 n30 ∣ S i ∣ ≤ 20 |Si|≤20 Si20

题解

从左到右把字符一个一个加进来。 f i , j , k , l f_{i,j,k,l} fi,j,k,l 表示从第 i i i 个字符到第 j j j 个字符形成的子串能否匹配到 S k S_k Sk 的第 l l l 位。然后再把最后一维压缩,加点预处理就过了。复杂度 O ( n ∗ ∣ L ∣ 3 ) O(n*|L|^3) O(nL3)

把最后一维压掉我居然没想到。我是状压领域脑瘫。

Code

#include<bits/stdc++.h>
using namespace std;

const int N=150+5,M=30+5,K=20+5;

int n,m,len[N],ans[N],f[N][N][M],g[N][M];
bool ck[N][N];
char s[M][K],s1[N];

int main(){
	scanf("%s%d",s1+1,&m);
	n=strlen(s1+1);
	for(int i=1;i<=m;i++){
		scanf("%s",s[i]+1);
		len[i]=strlen(s[i]+1);
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			for(int k=1;k<=len[j];k++)
				if(s1[i]==s[j][k])
					g[i][j]|=(1<<k-1);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++)
			if(s1[i]==s[j][1]){
				f[i][i][j]=1;
				if(len[j]==1) ck[i][i]=true;
			}
		for(int j=1;j<i;j++)
			for(int k=1;k<=j;k++)
				if(ck[i-1][j+1]||j+1>i-1)
					for(int o=1;o<=m;o++){
						f[i][k][o]|=((f[j][k][o]<<1)&g[i][o]&((1<<len[o])-1));
						if((f[i][k][o]>>len[o]-1)&1) ck[i][k]=true;
					}
		for(int j=i;j>=1;j--)
			for(int k=j-1;k>=1;k--)
				if(ck[i][j]&&ck[j-1][k]) ck[i][k]=true;
	}
	for(int i=1;i<=n;i++){
		ans[i]=ans[i-1]+1;
		for(int j=1;j<=i;j++)
			if(ck[i][j]) ans[i]=min(ans[i],ans[j-1]);
	}
	printf("%d",ans[n]);
	return 0;
}

相关文章:

  • uniapp+微信小程序+地图+传入多个标记点显示+点击打开内置地图导航+完整代码
  • 网络安全:利用 IP 查询构建网络安全系统的方法
  • 技术方案包括哪些内容
  • JavaAdv——多线程同步案例(售票系统)
  • OpenCV计算摄影学(16)调整图像光照效果函数illuminationChange()
  • BambuStudio学习笔记:KDTreeIndirect类
  • 数据库复习(第五版)- 第四章 数据库安全性
  • LeetCode hot 100—二叉树的中序遍历
  • 【JavaEE】SpringMVC简单练习
  • GTX 50系显卡cuda、pytorch环境配置
  • VMware ESX曝3个0Day漏洞,已被黑客利用
  • 股指期货的主要用途有哪些?
  • 百度权重有什么用?如何查看百度权重?
  • 20250306JIRA添加企业微信邮箱通知
  • C++ primier plus 第七节 函数探幽第一部分
  • Stable Diffusion教程|快速入门SD绘画原理与安装
  • 文本处理Bert面试内容整理-如何使用BERT进行微调?
  • linux0.11内核源码修仙传第四章——head.s
  • 长轮询和短轮询的区别?
  • WebAssembly技术及应用了解
  • 智通人才网招聘信息/信息流优化师培训
  • 品牌企业网站案例/如何做好网络营销管理
  • 广州网站建设系统/seo入门教学
  • 手机版网站建设价格/百度指数搜索榜
  • 怎么做网站邮箱/奶茶网络营销策划方案
  • 摄影设计师招聘/seo排名点击软件