题目链接

BZOJ2121

题解

dp怎么那么神呐QAQ

我们要求出最小字符串长度

我们设一个\(dp[i]\)表示前\(i\)个字符最后所形成的最短字符串长度

对于第\(i\)个字符,要么保留,就是\(dp[i] = dp[i - 1] + 1\),要么和前面若干个字符一起被删掉

我们设\(c[i][j]\)表示区间\([i,j]\)能否被删掉

如果我们能求出\(c[i][j]\)就好了

我们再设一个\(f[i][j][k][t]\)表示区间\([i,j]\)能否匹配第\(k\)个串的前\(t\)个字符

如果存在一个\(k\),使得\(f[i][j][k][len[k]]\)为真,那么\(c[i][j]\)就为真

所以我们只需考虑如何求出\(f[i][j][k][t]\)

就是简单的区间\(dp\)啦

枚举断点\(d\),然后\(f[i][j][k][l] |= f[i][d][k][t] \&\& c[d + 1][j]\)

注意转移的顺序,因为\(f\)和\(c\)是同时计算的,倒序枚举即可

然后就做完啦

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define LL long long int
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 155,maxm = 100005,INF = 1000000000;
int f[maxn][maxn][32][23],dp[maxn],c[maxn][maxn],len[32],n,m;
char S[maxn],s[32][23];
int main(){
scanf("%s",S + 1); m = strlen(S + 1);
scanf("%d",&n);
REP(i,n) scanf("%s",s[i] + 1),len[i] = strlen(s[i] + 1);
for (int i = m; i; i--){
for (int j = i; j <= m; j++){
for (int k = 1; k <= n; k++){
f[i][i - 1][k][0] = 1;
for (int l = 1; l <= len[k]; l++){
f[i][j][k][l] = (f[i][j - 1][k][l - 1] && S[j] == s[k][l]);
for (int d = i; d < j; d++)
f[i][j][k][l] |= (f[i][d][k][l] && c[d + 1][j]);
}
}
for (int k = 1; k <= n; k++) c[i][j] |= f[i][j][k][len[k]];
}
}
for (int i = 1; i <= m; 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[m]);
return 0;
}

BZOJ2121 字符串游戏 【dp】的更多相关文章

  1. BZOJ2121: 字符串游戏(DP)(字符串删单词,求最多可以删去多少)

    2121: 字符串游戏 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 672  Solved: 376[Submit][Status][Discuss ...

  2. BZOJ2121 字符串游戏

    Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其 他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删 ...

  3. BZOJ 2121: 字符串游戏 区间DP + 思维

    Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对 于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删 ...

  4. 1233: 传球游戏 [DP]

    1233: 传球游戏 [DP] 时间限制: 1 Sec 内存限制: 128 MB 提交: 4 解决: 3 统计 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做 ...

  5. 20181228 模拟赛 T3 字符串游戏 strGame 博弈论 字符串

    3  字符串游戏(strGame.c/cpp/pas) 3.1  题目描述 pure 和 dirty 决定玩 T 局游戏.对于每一局游戏,有n个字符串,并且每一局游戏由K轮组成.具体规则如下:在每一轮 ...

  6. 游戏 DP

    游戏 DP [题意描述] 小喵喵喜欢玩 RPG 游戏.在这款游戏中,玩家有两个属性,攻击和防御,现在小喵喵的攻击和防御都是 1,接下来小喵喵会依次遇到 n 个事件.事件有两种. 1.小喵喵经过修炼,角 ...

  7. [LuoguP1005]矩阵取数游戏 (DP+高精度)

    题面 传送门:https://www.luogu.org/problemnew/show/P1005 Solution 我们可以先考虑贪心 我们每一次都选左右两边尽可能小的数,方便大的放在后面 听起来 ...

  8. 【bzoj2121】字符串游戏 区间dp

    题目描述 给你一个字符串L和一个字符串集合S,如果S的某个子串在S集合中,那么可以将其删去,剩余的部分拼到一起成为新的L串.问:最后剩下的串长度的最小值. 输入 输入的第一行包含一个字符串,表示L. ...

  9. BZOJ#2121. 字符串游戏 [区间dp]

    // powered by c++11 // by Isaunoya #include<bits/stdc++.h> #define rep(i , x , y) for(register ...

随机推荐

  1. 漫谈 Clustering (番外篇): Vector Quantization

    在接下去说其他的聚类算法之前,让我们先插进来说一说一个有点跑题的东西:Vector Quantization.这项技术广泛地用在信号处理以及数据压缩等领域.事实上,在 JPEG 和 MPEG-4 等多 ...

  2. VC-基础-WebBrowser控件中弹出新网页窗口

    用webbrowser控件浏览网页时,常弹出新的网页窗口,若不做任何控制的话,会在默认浏览器(一般是IE)中打开,这样就在新的窗口打开了,原程序就很难控制了,且存在webbrowser控件和IE的se ...

  3. java算法面试题:递归算法题1

    递归算法题1 一个整数,大于0,不用循环和本地变量,按照n,2n,4n,8n的顺序递增,当值大于5000时,把值按照指定顺序输出来.例:n=1237则输出为:1237,2474,4948,9896,9 ...

  4. java 实现猜数字游戏 随机给定一个数字,猜大小直到正确

    package com.swift; import java.util.Random; import java.util.Scanner; public class GuessBigSmall { p ...

  5. Angular2 Service获取json数据

    在Angular2框架下一般交互解析json是要用到Service的,其实除了Service还是很多的,今天先写个最简单的前后端数据交互 嗯~~ 首先我先在app包下直接创建Service 好了 这里 ...

  6. advanced regression to predict housing prices

    https://docs.google.com/presentation/d/e/2PACX-1vQGlXP6QZH0ATzXYwnrXinJcCn00fxCOoEczPAXU-n3hAPLUfMfi ...

  7. Python 文件读写 文件和路径

    1.在Windows上,使用倒斜杆作为文件夹之间的分隔符,在Linux上,使用正斜杠作为路径分隔符.在编写Python脚本时,可以os.path.join()函数来处理 在Windows环境下命令如下 ...

  8. JZOJ 1321. 灯

    1321. 灯 Time Limits: 1000 ms  Memory Limits: 65536 KB  Detailed Limits Goto ProblemSet Description 贝 ...

  9. 一个人的旅行 HDU - 2066 (最短路)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  10. [BZOJ1597][Usaco2008 Mar]土地购买(斜率优化)

    Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000, ...