bzoj 2121 字符串游戏
来源:互联网 发布:win10如何关闭端口 编辑:程序博客网 时间:2024/06/01 10:12
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
#define inf 1e9
#define eps 1e-10
#define md
#define N
using namespace std;
bool f[170][35][25],c[170][170];
int dp[170],len[35];
char S[170],st[35][25];
int main()
{
scanf("%s",S+1); int lth=strlen(S+1);
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%s",st[i]+1);
len[i]=strlen(st[i]+1);
}
for (int i=lth;i;i--)
{
memset(f,0,sizeof(f));
for (int k=1;k<=n;k++)
f[i-1][k][0]=1;
for (int j=i;j<=lth;j++)
{
for (int k=1;k<=n;k++)
for (int p=1;p<=len[k];p++)
f[j][k][p]|=(f[j-1][k][p-1]&&st[k][p]==S[j]);
for (int d=i;d<=j;d++)
if (c[d+1][j])
{
for (int k=1;k<=n;k++)
for (int p=1;p<=len[k];p++)
f[j][k][p]|=f[d][k][p];
}
}
for (int j=i;j<=lth;j++)
for (int k=1;k<=n;k++)
c[i][j]|=f[j][k][len[k]];
}
for (int i=1;i<=lth;i++)
{
dp[i]=dp[i-1]+1;
for (int j=1;j<=i;j++)
if (c[j][i]) dp[i]=min(dp[i],dp[j-1]);
}
printf("%d\n",dp[lth]);
return 0;
}
- bzoj 2121: 字符串游戏
- bzoj 2121 字符串游戏
- BZOJ 2121: 字符串游戏
- BZOJ 2121 字符串游戏
- bzoj 2121: 字符串游戏 (字符串dp)
- bzoj 2121 字符串游戏(字符串dp)
- bzoj 2121: 字符串游戏 动态规划
- 【bzoj 2121】字符串游戏 (dp)
- 游戏 BZOJ
- [bzoj][SCOI2009]游戏
- bzoj 分裂游戏
- BZOJ 1854 游戏
- BZOJ 1025: [SCOI2009]游戏
- BZOJ 1025: [SCOI2009]游戏
- bzoj 1854: [Scoi2010]游戏
- 【bzoj 1025】: [SCOI2009]游戏
- 【BZOJ 1025】 [SCOI2009]游戏
- 【BZOJ 1854】 [Scoi2010]游戏
- dp专题训练
- bzoj 3743 kmap
- web 后端学习记录1_jsp学习记录
- bzoj 2669 局部极小值
- bzoj 1049 数字序列
- bzoj 2121 字符串游戏
- bzoj 2054 疯狂的馒头
- bzoj 2734 集合选数
- bzoj 3594 方伯伯的玉米田
- bzoj 1818/1732 聚会
- heheda的数论专题练习
- bzoj 3997 组合数学
- bzoj 2039 人员雇佣
- git 中文文件名乱码