E. Dreamoon and Strings(Codeforces Round #272)
2017-05-06 18:37
381 查看
E. Dreamoon and Strings
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
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
froms. Dreamoon wants to know
for
all x from 0 to |s| where |s| denotes
the length of string s.
Input
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.
Output
Print |s| + 1 space-separated integers in a single line representing the
for
all x from 0 to |s|.
Sample test(s)
input
output
input
output
Note
For the first sample, the corresponding optimal values of s' after removal 0 through |s| = 5 characters
from s are {"aaaaa", "aaaa","aaa", "aa", "a", ""}.
For the second sample, possible corresponding optimal values of s' are {"axbaxxb", "abaxxb", "axbab", "abab", "aba", "ab","a", ""}.
dp[i][j] 为在字符串s的前i个删j个字符。k为从i開始,删除k个字符,会多出来一个字符串p。
则dp[i][j]=max(dp[i][j],dp[i-m-k][j-k]+1),m为字符串p的长度。
代码:
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
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
froms. Dreamoon wants to know
for
all x from 0 to |s| where |s| denotes
the length of string s.
Input
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.
Output
Print |s| + 1 space-separated integers in a single line representing the
for
all x from 0 to |s|.
Sample test(s)
input
aaaaa aa
output
2 2 1 1 0 0
input
axbaxxb ab
output
0 1 1 2 1 1 0 0
Note
For the first sample, the corresponding optimal values of s' after removal 0 through |s| = 5 characters
from s are {"aaaaa", "aaaa","aaa", "aa", "a", ""}.
For the second sample, possible corresponding optimal values of s' are {"axbaxxb", "abaxxb", "axbab", "abab", "aba", "ab","a", ""}.
dp[i][j] 为在字符串s的前i个删j个字符。k为从i開始,删除k个字符,会多出来一个字符串p。
则dp[i][j]=max(dp[i][j],dp[i-m-k][j-k]+1),m为字符串p的长度。
代码:
#include <iostream> #include <cstdio> #include <cstring> const int maxn=2000+100; using namespace std; char s1[maxn],s2[maxn]; int dp[maxn][maxn]; int n,m; int solve(int i) { int top=m,ans=0; if(i<m) return maxn; while(top&&i) { if(s1[i]==s2[top]) top--; else ans++; i--; } if(top) return maxn; else return ans; } int main() { scanf("%s%s",s1+1,s2+1); n=strlen(s1+1); m=strlen(s2+1); for(int i=0;i<=n;i++) for(int j=i+1;j<=n;j++) dp[i][j]=-maxn;//j>i不可能有值。赋以无穷小,防止被取到 for(int i=1;i<=n;i++) { int k=solve(i); for(int j=0;j<=i;j++) { dp[i][j]=max(dp[i-1][j],dp[i][j]); if(j>=k) { dp[i][j]=max(dp[i][j],dp[i-m-k][j-k]+1);//前面的j>i赋无穷小就是防止j-k>i-m-k时被取到。 } } } for(int i=0;i<=n;i++) { printf("%d ",dp [i]); } return 0; }
相关文章推荐
- 477 C. Dreamoon and Strings
- Codeforces Round #272 (Div. 1) Problem C. Dreamoon and Strings
- 【CODEFORCES】 C. Dreamoon and Strings
- Codeforces 476 E. Dreamoon and Strings
- Codeforces Round #272 (Div. 2) E. Dreamoon and Strings dp
- 【CODEFORCES】 C. Dreamoon and Strings
- Swift Strings and Characters
- Pointers and Strings
- Encode and Decode Strings -- LeetCode
- Part 2:(Strings and Characters, Collection Types, Control Flow)
- B. Mike and strings
- CF798B:Mike and strings(Hash)
- Dreamoon and Sets CodeForces - 476D
- [Codeforces Round #195 DIV2D (CF336D)] Vasily the Bear and Beautiful Strings
- "Isomorphic Strings" and "Bulls and Cows"
- QueryBuilder: A Simple Way to Read and Write Query Strings
- 2.老生常谈:Strings and String Builders
- 【Codechef】February Challenge 2015 Chef and Strings
- LeetCode Encode and Decode Strings
- Dreamoon and WiFi CodeForces - 476B