题目链接:

http://www.codeforces.com/contest/476/problem/E

E. Dreamoon and Strings

time limit per test 1 second
memory limit per test 256 megabytes
#### 问题描述
> Dreamoon has a string s and a pattern string p. He first removes exactly x characters from s obtaining string s' as a result. Then he calculates that is defined as the maximal number of non-overlapping substrings equal to p that can be found in s'. He wants to make this number as big as possible.
>
> More formally, let's define as maximum value of over all s' that can be obtained by removing exactly x characters from s. Dreamoon wants to know for all x from 0 to |s| where |s| denotes the length of string s.
#### 输入
> The first line of the input contains the string s (1 ≤ |s| ≤ 2 000).
>
> The second line of the input contains the string p (1 ≤ |p| ≤ 500).
>
> Both strings will only consist of lower case English letters.
#### 输出
> Print |s| + 1 space-separated integers in a single line representing the for all x from 0 to |s|.
#### 样例
> **sample input**
> aaaaa
> aa
>
> **sample output**
> 2 2 1 1 0 0

题意

给你一个文本串和一个模板串,求文本串删掉k(k=0,1,...,n)个字母后的最大不重叠子串个数。

题解

dp[i][j]表示前i个删掉j个字母后能得到的最大不重叠子串个数。

求出s1[i]结尾的往前能匹配到的位置,然后考虑这个匹配选和不选两种情况转移。

初始化的时候注意一点。

代码

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<ctime>
#include<vector>
#include<cstdio>
#include<string>
#include<bitset>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
#define X first
#define Y second
#define mkp make_pair
#define lson (o<<1)
#define rson ((o<<1)|1)
#define mid (l+(r-l)/2)
#define sz() size()
#define pb(v) push_back(v)
#define all(o) (o).begin(),(o).end()
#define clr(a,v) memset(a,v,sizeof(a))
#define bug(a) cout<<#a<<" = "<<a<<endl
#define rep(i,a,b) for(int i=a;i<(b);i++)
#define scf scanf
#define ptf printf typedef long long LL;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef vector<pair<int, int> > VPII; const int INF = 0x3f3f3f3f;
const LL INFL = 0x3f3f3f3f3f3f3f3fLL;
const double eps = 1e-8;
const double PI = acos(-1.0); //start---------------------------------------------------------------------- const int maxn = 2222; char s1[maxn],s2[maxn];
int dp[maxn][maxn];
int l1,l2; int match(int i){
int j=l2,ret=0;
while(i>0&&j>0){
if(s1[i]==s2[j]) j--;
else ret++;
i--;
}
if(j==0) return ret;
else return -1;
} void init(){
rep(i,0,maxn) rep(j,0,maxn) dp[i][j]=-INF;
rep(i,0,maxn){
for(int j=0;j<=i;j++){
dp[i][j]=0;
}
}
} int main() {
scanf("%s%s",s1+1,s2+1);
l1=strlen(s1+1),l2=strlen(s2+1);
init();
for(int i=1;i<=l1;i++){
int ret=match(i);
//不选
for(int k=0;k<=i;k++){
dp[i][k]=max(dp[i][k],dp[i-1][k]);
}
if(ret<0) continue;
int j=i-ret-l2;
//选
for(int k=0;k<=i;k++){
if(k>=ret) dp[i][k]=max(dp[i][k],dp[j][k-ret]+1);
}
}
for(int i=0;i<=l1;i++) if(dp[l1][i]<0) dp[l1][i]=0;
for(int i=0;i<l1;i++) printf("%d ",dp[l1][i]);
printf("%d\n",dp[l1][l1]);
return 0;
} //end-----------------------------------------------------------------------

Codeforces Round #272 (Div. 2) E. Dreamoon and Strings dp的更多相关文章

  1. Codeforces Round #272 (Div. 2) E. Dreamoon and Strings 动态规划

    E. Dreamoon and Strings 题目连接: http://www.codeforces.com/contest/476/problem/E Description Dreamoon h ...

  2. Codeforces Round #272 (Div. 2) B. Dreamoon and WiFi dp

    B. Dreamoon and WiFi 题目连接: http://www.codeforces.com/contest/476/problem/B Description Dreamoon is s ...

  3. Codeforces Round #272 (Div. 2) D. Dreamoon and Sets 构造

    D. Dreamoon and Sets 题目连接: http://www.codeforces.com/contest/476/problem/D Description Dreamoon like ...

  4. Codeforces Round #272 (Div. 2) A. Dreamoon and Stairs 水题

    A. Dreamoon and Stairs 题目连接: http://www.codeforces.com/contest/476/problem/A Description Dreamoon wa ...

  5. Codeforces Round #272 (Div. 1) A. Dreamoon and Sums(数论)

    题目链接 Dreamoon loves summing up something for no reason. One day he obtains two integers a and b occa ...

  6. Codeforces Round #272 (Div. 2)-C. Dreamoon and Sums

    http://codeforces.com/contest/476/problem/C C. Dreamoon and Sums time limit per test 1.5 seconds mem ...

  7. Codeforces Round #272 (Div. 2)-B. Dreamoon and WiFi

    http://codeforces.com/contest/476/problem/B B. Dreamoon and WiFi time limit per test 1 second memory ...

  8. Codeforces Round #272 (Div. 2)-A. Dreamoon and Stairs

    http://codeforces.com/contest/476/problem/A A. Dreamoon and Stairs time limit per test 1 second memo ...

  9. Codeforces Round #272 (Div. 2)C. Dreamoon and Sums 数学推公式

    C. Dreamoon and Sums   Dreamoon loves summing up something for no reason. One day he obtains two int ...

随机推荐

  1. jsp小基础归纳

    JSP的本质就是一个Servlet,JSP的运行之前会先被Tomcat服务器翻译为.java文件,然后在将.java文本编译为.class文件,而我们在访问jsp时,处理请求的就是那个翻译后的类. 1 ...

  2. sql 事务处理 与 try catch

    begin transaction tr declare @error int; ; select * from Car_Brand set @error=@error+@@ERROR set @er ...

  3. [转]IA64与X86-64的区别

    原文:https://www.cnblogs.com/sunbingqiang/p/7530121.html 说到IA-64与x86-64可能很多人会比较陌生.不知道你在下载系统的时候有没有注意过,有 ...

  4. PHP base64转换成图片

    获取base64文件 $image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASIAAAEiCAYAAABdvt+2AAAgAElEQV ...

  5. 20155206 2016-2017-2 《Java程序设计》第1周学习总结

    20155206 2016-2017-2 <Java程序设计>第1周学习总结 第一,二章学习内容总结 第一章 java基本知识 Java的三种技术架构: JAVAEE:Java Platf ...

  6. c语言实现shell

    shell的编写 命令行传参数 每个C语言程序都必须有一个称为main()的函数,作为程序启动的起点.当执行程序时,命令行参数(command-line argument)(由shell逐一解析)通过 ...

  7. 20155317王新玮 2016-2017-2《Java程序设计》第2周学习总结

    20155317 2016-2017-2<Java程序设计>第2周学习总结 课本知识: 认识类型与环境 整数:包括short,int,long .它们分别占用2个字节,4个字节和8个字节. ...

  8. 服务端调用接口API利器之HttpClient

    前言 之前有介绍过HttpClient作为爬虫的简单使用,那么今天在简单的介绍一下它的另一个用途:在服务端调用接口API进行交互.之所以整理这个呢,是因为前几天在测试云之家待办消息接口的时候,有使用云 ...

  9. 1109: [POI2007]堆积木Klo

    1109: [POI2007]堆积木Klo https://lydsy.com/JudgeOnline/problem.php?id=1109 分析: 首先是dp,f[i]表示到第i个的最优值,f[i ...

  10. LVS入门篇(三)之LVS的工作模式和调度算法

    1.NAT模型 (1)原理图: ①.客户端(200.10.10.1)将请求发往前端的负载均衡器(114.100.80.10),请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP ...