Codeforces Round #272 (Div. 1)C(字符串DP)

时间:2024-01-16 11:13:20
C. 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 Codeforces Round #272 (Div. 1)C(字符串DP) 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 Codeforces Round #272 (Div. 1)C(字符串DP) as
maximum value of Codeforces Round #272 (Div. 1)C(字符串DP) over
all s' that can be obtained by removing exactly x characters
froms. Dreamoon wants to know Codeforces Round #272 (Div. 1)C(字符串DP) 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 Codeforces Round #272 (Div. 1)C(字符串DP) 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

题意:RT

思路:dp[i][j]表示s的前i个字符一共匹配了j个p串,删掉的最少字符数

            先用一个数组en[i]预处理出在s串的每一个位置i。直到能最早匹配p串的结束的位置

            转移为dp[ en[i+1] ][j+1]= min (dp[ en[i+1] ][j+1] 。dp[ i ][j] + (en[i+1]-i-m) )