BZOJ2121: 字符串游戏(DP)(字符串删单词,求最多可以删去多少)
2121: 字符串游戏
Time Limit: 10 Sec Memory Limit: 259 MB
Submit: 672 Solved: 376
[Submit][Status][Discuss]
Description
Input
Output
输出一个整数,表示L的最短长度。
Sample Input
3
ac
abc
aaa
Sample Output
【样例说明】
aaabccd
aacd
ad
对于100%数据,满足|L|<151,|S|<31,S中的每个元素|p|<21
HINT
Source
思路:我们用f[i][j][k][l]表示第[i,j]这个区间能否删成第k个单词的前l位,用cov[i][j]表示[i,j]这个区间能否被完全删去。
复杂度O(N^3*S*p);
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int f[maxn][maxn][][],cov[maxn][maxn],dp[maxn];
char c[maxn],s[][]; int Len[];
int main()
{
int N,M;
scanf("%s",c+); N=strlen(c+);
scanf("%d",&M);
for(int i=;i<=M;i++){
scanf("%s",s[i]+);
Len[i]=strlen(s[i]+);
}
rep(i,,N) rep(j,,M) f[i][i-][j][]=; //匹配的时候需要边界条件
rep(len,,N)
rep(L,,N-len+){
int R=L+len-;
rep(i,,M){
rep(j,,Len[i]) if(c[R]==s[i][j]) f[L][R][i][j]|=f[L][R-][i][j-]; //匹配
rep(j,,Len[i]) rep(k,L+,R) //不匹配
f[L][R][i][j]|=(f[L][k-][i][j]&cov[k][R]);
}
rep(i,,M) cov[L][R]|=f[L][R][i][Len[i]];
}
rep(i,,N){ //背包得到最大值
rep(j,,i) if(cov[j][i]) rep(k,i,N) dp[k]=max(dp[k],dp[j-]+i-j+);
rep(j,i+,N) dp[j]=max(dp[j],dp[j-]);
}
printf("%d\n",N-dp[N]);
return ;
}
把int换成bool快了一倍,word天啦。
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
bool f[maxn][maxn][][],cov[maxn][maxn];
char c[maxn],s[][];int Len[],dp[maxn];
int main()
{
int N,M;
scanf("%s",c+); N=strlen(c+);
scanf("%d",&M);
for(int i=;i<=M;i++){
scanf("%s",s[i]+);
Len[i]=strlen(s[i]+);
}
rep(i,,N) rep(j,,M) f[i][i-][j][]=; //匹配的时候需要边界条件
rep(len,,N)
rep(L,,N-len+){
int R=L+len-;
rep(i,,M){
rep(j,,Len[i]) if(c[R]==s[i][j]) f[L][R][i][j]|=f[L][R-][i][j-]; //匹配
rep(j,,Len[i]) rep(k,L+,R) //不匹配
f[L][R][i][j]|=(f[L][k-][i][j]&cov[k][R]);
}
rep(i,,M) cov[L][R]|=f[L][R][i][Len[i]];
}
rep(i,,N){ //背包得到最大值
rep(j,,i) if(cov[j][i]) rep(k,i,N) dp[k]=max(dp[k],dp[j-]+i-j+);
rep(j,i+,N) dp[j]=max(dp[j],dp[j-]);
}
printf("%d\n",N-dp[N]);
return ;
}
BZOJ2121: 字符串游戏(DP)(字符串删单词,求最多可以删去多少)的更多相关文章
- BZOJ 2121: 字符串游戏 区间DP + 思维
Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对 于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删 ...
- BZOJ2121 字符串游戏
Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其 他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删 ...
- CodeForces7D 字符串hash + dp
https://cn.vjudge.net/problem/20907/origin 长度是 n 的字符串 s,如果它自身是回文数,且它的长度为 的前缀和后缀是 (k - )-回文数,则它被称作 k- ...
- 20181228 模拟赛 T3 字符串游戏 strGame 博弈论 字符串
3 字符串游戏(strGame.c/cpp/pas) 3.1 题目描述 pure 和 dirty 决定玩 T 局游戏.对于每一局游戏,有n个字符串,并且每一局游戏由K轮组成.具体规则如下:在每一轮 ...
- QuickHit项目(输出字符串游戏)
public class leve { private int leveNo; private int strLength; private int strTimes; private int tim ...
- Codeforces Round #367 (Div. 2) A B C 暴力 二分 dp(字符串的反转)
A. Beru-taxi time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- Codeforces Beta Round #17 C. Balance (字符串计数 dp)
C. Balance time limit per test 3 seconds memory limit per test 128 megabytes input standard input ou ...
- hihoCoder #1320 : 压缩字符串 区间dp
/** 题目:hihoCoder #1320 : 压缩字符串 链接:https://hihocoder.com/problemset/problem/1320 描述 小Hi希望压缩一个只包含大写字母' ...
- 32-回文字符串(dp)
http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=37 回文字符串 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描 ...
随机推荐
- 2.4 The Object Model -- Computed Properties and Aggregate Data with @each(计算的属性和使用@each聚合数据)
1. 通常,你可能有一个计算的属性依赖于数组中的所有元素来确定它的值.例如,你可能想要计算controller中所有todo items的数量,以此来确定完成了多少任务. export default ...
- samba创建权限(复制)
1.今天发现用samba挂载开发过程中,发现别人的权限和我的经常不一致,导致提交git的时候都被提交了,心想应该有哪里有一个统一设置的可以设置用户的默认权限,后来百度之后找到下面的文章,以后创建文件和 ...
- 31Sql数据库的连接
Qt 提供了 QtSql 模块来提供平台独立的基于 SQL 的数据库操作.这里我们所说的“平台独立”,既包括操作系统平台,有包括各个数据库平台.另外,我们强调了“基于 SQL”,因为 NoSQL 数据 ...
- EditPlus 4.3.2487 中文版已经发布(11月12日更新)
新的版本修复了粘贴多重选择文本的问题,以及增加了横向扩展列选模式选择范围的快捷键(Ctrl+Alt+→/←).
- redis入门学习记录(二)
继第一节 redis入门学习记录(一)之后,我们来学习redis的基本使用. 接下来我们看看/usr/local/redis/bin目录下的几个文件作用是什么? redis-benchmark:red ...
- Flex与SSH集成
Flex与SSH集成 -- ::| 分类: flex |举报|字号 订阅 Flex与SSH集成 ,下载blazeds_bin_3---.zip 包,将其解压 取下blazeds.war包 更改为bla ...
- PhpStorm提高效率的使用方法及设置(快捷键)
原文链接:https://my.oschina.net/chunto/blog/262954 快捷键: CTRL + D 复制当前行到下一行 或 复制选中内容到选中内容之后 CTRL + Y 删除 ...
- HDU 2896 病毒侵袭(AC自动机)题解
题意:给你n个模式串,再给你m个主串,问你每个主串中有多少模式串,并输出是哪些.注意一下,这里给的字符范围是可见字符0~127,所以要开130左右. 思路:用字典树开的时候储存编号,匹配完成后set记 ...
- c#pdf查看器
Free Spire.PDF for .NET is a Community Edition of the Spire.PDF for .NET, which is a totally free PD ...
- ssh connection refused
执行sudo apt-get install openssh-server命令安装SSH服务