SSL 1017 P1026 統計單詞個數

2021-10-11 21:40:38 字數 1968 閱讀 4264

給出乙個長度不超過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

3thisisabookyouareaoh4is

aoksab

7

// this/isabookyoua/reaoh

一道簡單dp

這道題題意很重要:不能以同乙個開頭生成兩個單詞

注意讀入時每行20個,要拼接在乙個字串內

最後dp

設a[x][y]表示前x行劃y段的最多單詞數

結果輸出a[20*p][k]

本題dp分兩部分:

第一部分:

for

(int i=

20*p;i>=

1;i--

)

附上f函式:

boolf(

int x,

int y)

return0;

}

第二部分:

for

(int i=

1;i<=

20*n;i++

)a[i][1

]=t[1]

[i];

for(

int i=

1;i<=k;i++

)a[i]

[i]=a[i-1]

[i-1

]+t[i]

[i];

//初始化,不加60分

for(

int i=

1;i<=

20*n;i++

)for

(int j=

1;j<=k&&j)for

(int u=j;u) a[i]

[j]=

max(a[i]

[j],a[u]

[j-1

]+t[u+1]

[i])

;

最後附上完整**:

#include

#include

#include

#include

using

namespace std;

int n,k,q,a[

1010][

50],t[1010][

1010];

string c,d,b[7]

;boolf(

int x,

int y)

return0;

}voiddp(

)int

main()

//注意輸入方式

scanf

("%d"

,&q)

;for

(int i=

1;i<=q;i++

)cin>>b[i]

;for

(int i=

20*n;i>=

1;i--)dp

();//可以移出來

printf

("%d"

,a[20

*n][k]);

return0;

}

P1026 統計單詞個數 SSL1017

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

P1026 統計單詞個數

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

P1026 統計單詞題解

又是一道讓sy coding 1h,除錯2h的好題呢 手動分割 傳送看題第一眼 區間 dp 看題第二眼 好像不是區間 dp 看題第三眼 語文老師 老師這段話在說啥?語文老師不理我並把我丟出去 這段話就是說,把選的所有單詞左對齊,不能有任意乙個短單詞和某個長單詞的前 len 位一樣。將例子中的 thi...