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 描 ...
随机推荐
- python16_day38【flask】
一.简介 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预 ...
- 4.5 Routing -- Setting Up A Controller
1. 改变URL可能也会改变屏幕显示哪个模板.然而,如果它们有信息去显示,模板才是有用的. 2. 在Ember.js中,一个模板从一个controller检索信息去显示. 3. 为了告诉control ...
- c++第十八天
p105~p108: 1.迭代器与数组的不同:迭代器的索引值必须是无符号类型,数组的索引无此要求. 2.使用数组的时候编译器一般会把它转化为指针. 3.auto ia2(数组名);的结果是:获得一个指 ...
- javascript-高级用法
22.1 安全的类型检测 为什么:typeof 不靠谱, 无法将数组从对象中区分出来, instanceof 有特殊情况,在iframe存在的情况下无法判断另一个iframe内的数组 如何做:Obje ...
- 20145221 《Java程序设计》课程总结
20145221 <Java程序设计>课程总结 每周读书笔记链接汇总 Atom使用心得 - 21世纪的编辑器 网络安全攻防学习平台 - 基础关 Java实现:数据结构之排序 2014522 ...
- 20145325张梓靖 《Java程序设计》第5周学习总结
20145325张梓靖 <Java程序设计>第5周学习总结 教材学习内容总结 try catch Java中所有错误都会被打包为对象.如果某个方法声明会抛出Throwable或子类实例,只 ...
- 关于Drupal中使用hook_schema建立数据库报错PDOException: SQLSTATE[42000]的解决办法
报错信息如下:PDOException: SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too l ...
- Web漏洞挖掘之网络信息探测
我们在搜集目标系统信息的时候主要需要搜集的是:目标服务器系统信息(IP,服务器所用系统等):目标网站子域名:目标网站(服务器)的开放端口:目标域名信息.目标网站内容管理系统(CMS)等. 一.子域名搜 ...
- 用PHP开发命令行工具
介绍 用过laravel开发过项目的都应该用过artisan,通过artisan我们可以在命令行中创建控制器类,Eloquent类等,今天我们将通过php来开发命令行工具 开发环境与工具 使用vagr ...
- ${user.home} is not working in jenkins windows system
default setting create m2 in C:\Windows\system32\config\systemprofile change it to <localReposito ...