P1026 統計單詞個數 SSL1017

2021-10-11 19:10:18 字數 969 閱讀 7425

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

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

要求輸出最大的個數。

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

p表示字串的行數;

k表示分為k個部分。

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

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

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

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

1 3thisisabookyouareaoh4is

aoksab7 // this/isabookyoua/reaoh

從ssloj過來的朋友們會發現我的資料和題目給的不一樣(那是因為sslojta沒有多組資料,wa了的朋友們注意了)

該題目很容易想到設f[i][j]為第i個前劃j段的個數,但是有乙個問題:如何快速求從x到y的個數呢?

打表**題目告訴我們,當選用乙個單詞之後,其第乙個字母不能再用,於是,從x到y的個數一定是從x+1到y的個數+是否能在單詞表裡找到第x位打頭且出現在x~y間的單詞。

f的方程:f[i][j]=max

return0;

}voiddp(

)return;}

intmain()

cin>>s;

for(

int i=

0;i)for

(int i=

20*p;i>=

1;i--)dp

(); cout<20*p]

[k]

}

P1026 統計單詞個數

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

P1026 統計單詞個數

p1026 統計單詞個數 設 f i j 表示到主串第 i 位,已分成 j 段的最多單詞數,val l r 表示區間 l,r 包含的單詞個數 可得 f i j max f i j f u j 1 val u 1 i 套乙個三重迴圈即可 val l r 可以暴力處理 單詞判重用map include ...

P1026 統計單詞個數

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