洛谷 P1026 統計單詞個數

2021-07-26 19:11:55 字數 2280 閱讀 7264

題目描述

給出乙個長度不超過200的由小寫英文本母組成的字母串(約定;該字串以每行20個字母的方式輸入,且保證每行一定為20個)。要求將此字母串分成k份(1

<

k<=40),且每份中包含的單詞個數加起來總數最大(每份中包含的單詞可以部分重疊。當選用乙個單詞之後,其第乙個字母不能再用。例如字串this中可包含this和is,選用this之後就不能包含th)。

單詞在給出的乙個不超過6個單詞的字典中。

要求輸出最大的個數。

輸入輸出格式

輸入格式:

每組的第一行有二個正整數(p,k)

p表示字串的行數;

k表示分為k個部分。

接下來的p行,每行均有20個字元。

再接下來有乙個正整數s,表示字典中單詞個數。(1<=s<=6)

接下來的s行,每行均有乙個單詞。

輸出格式:

乙個整數,分別對應每組測試資料的相應結果。

輸入輸出樣例

輸入樣例#1:

1 3

thisisabookyouareaoh

4 is

a ok

sab

輸出樣例#1:

7 說明

this/isabookyoua/reaoh

注意:

兩個單詞開頭不能相同,就是在this 包含this 和 is,但this 和 th 只能算其中乙個。

分析:先預處理出每乙個區間有多少個單詞,然後再跑dp,設f[i,j]為切割i次,前j項最多有多少個單詞,則

f[i,j]=max(f[i-1,k]+sum[k+1,j]) (1

<

k<

j)**:

var

s:string;

p,k,n,l:longint;

a:array [1..6] of

string;

sum:array [1..200,0..200] of longint;

f:array [1..40,0..200] of longint;

procedure

init;

var i:longint;

t:string;

begin

readln(p,k);

for i:=1

to p do

begin

readln(t);

s:=s+t;

end;

readln(n);

for i:=1

to n do

readln(a[i]);

end;

function

poss

(h,t:longint):boolean;

var tt:string;

i:longint;

begin

tt:=copy(s,h,t-h+1);

for i:=1

to n do

if pos(a[i],tt)=1

then

exit(true);

exit(false);

end;

procedure

try;

var i,j:longint;

begin

l:=length(s);

for i:=l downto1do

for j:=i to l do

if poss(i,j) then sum[i,j]:=sum[i+1,j]+1

else sum[i,j]:=sum[i+1,j];

end;

function

max(x,y:longint):longint;

begin

if x>y then

exit(x)

else

exit(y);

end;

procedure

dp;var i,j,h:longint;

begin

f[1]:=sum[1];

for i:=2

to k do

for j:=i-1

to l do

for h:=i-1

to j-1

dobegin

f[i,j]:=max(f[i-1,h]+sum[h+1,j],f[i,j]);

end;

writeln(f[k,l]);

end;

begin

init;

try;

dp;end.

統計單詞個數 洛谷p1026

給出乙個長度不超過200的由小寫英文本母組成的字母串 約定 該字串以每行20個字母的方式輸入,且保證每行一定為20個 要求將此字母串分成k份 1單詞在給出的乙個不超過6個單詞的字典中。要求輸出最大的個數。輸入格式 每組的第一行有二個正整數 p,k p表示字串的行數 k表示分為k個部分。接下來的p行,...

洛谷P1026(統計單詞個數)

給出乙個長度不超過 200 的由小寫英文本母組成的字母串 該字串以每行 20 個字母的方式輸入,且保證每行一定為 20 個 要求將此字母串分成 k份,且每份中包含的單詞個數加起來總數最大。每份中包含的單詞可以部分重疊。當選用乙個單詞之後,其第乙個字母不能再用。例如字串 this 中可包含 this ...

洛谷 P1026 統計單詞個數

給出乙個長度不超過200的由小寫英文本母組成的字母串 約定 該字串以每行20個字母的方式輸入,且保證每行一定為20個 要求將此字母串分成k份 1單詞在給出的乙個不超過6個單詞的字典中。要求輸出最大的個數。輸入格式 每組的第一行有2個正整數 p,k p表示字串的行數,k表示分為k個部分。接下來的p行,...