SSL 2297——单词的划分_DP
Description
有一个很长的由小写字母组成字符串。为了便于对这个字符串进行分析,需要将它划分成若干个部分,每个部分称为一个单词。出于减少分析量的目的,我们希望划分出的单词数越少越好。你就是来完成这一划分工作的。
Input
第一行,一个字符串。(字符串的长度不超过100)
第二行一个整数n,表示单词的个数。(n<=100)
第3~n+2行,每行列出一个单词。
Output
一个整数,表示字符串可以被划分成的最少的单词数。
Sample Input
realityour
5
real
reality
it
your
our
Sample Output
2
纯DP题,比较水
思路主要是枚举长度,再判断这个长度能不能划分更多的单词。
代码如下:
var
s:string;
a:array[1..100]of string;
l,f:array[0..100]of longint;
i,j,k,m,n:longint;
begin
readln(s);
readln(n);
for i:=1 to n do
begin
readln(a[i]);
l[i]:=length(a[i]);
end;
for i:=1 to length(s) do
begin
f[i]:=maxlongint;
for j:=1 to n do
if l[j]<=i then
if (copy(s,i-l[j]+1,l[j])=a[j])and(f[i]>f[i-l[j]]+1) then f[i]:=f[i-l[j]]+1;
end;
writeln(f[length(s)]);
end.