洛谷P1026統計單詞個數題解 zhengjun

2021-10-03 13:10:42 字數 2663 閱讀 6135

題目描述

給出乙個長度不超過 200

20020

0 的由小寫英文本母組成的字母串(該字串以每行 20

2020

個字母的方式輸入,且保證每行一定為 20

2020

個)。要求將此字母串分成 k

kk 份,且每份中包含的單詞個數加起來總數最大。

每份中包含的單詞可以部分重疊。當選用乙個單詞之後,其第乙個字母不能再用。例如字串this中可包含thisis,選用this之後就不能包含th

單詞在給出的乙個不超過 6

66 個單詞的字典中。

要求輸出最大的個數。

輸入格式

每組的第一行有兩個正整數 p,k

p,kp,

k。 p

pp 表示字串的行數,k

kk 表示分為 k

kk 個部分。

接下來的 p

pp 行,每行均有 20

2020

個字元。

再接下來有乙個正整數 s

ss,表示字典中單詞個數。 接下來的 s

ss 行,每行均有乙個單詞。

輸出格式

1

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

輸入輸出樣例

輸入 #1 複製

1

3thisisabookyouareaoh4is

aoksab

輸出 #1 複製
7
說明/提示

【資料範圍】

對於 100

%100\%

100%

的資料,2≤k

≤40

2 \le k \le 40

2≤k≤40

,1 ≤s

≤6

1 \le s \le 6

1≤s≤6。

【樣例解釋】

劃分方案為 thi

s/is

aboo

kyou

a/re

ao

hthis / isabookyoua / reaoh

this/i

sabo

okyo

ua/r

eaoh

首先,這是一道有點難度的動態規劃。

用 f i,

jf_

fi,j

​ 表示 從尾巴用了 i

ii 個字元分了 j

jj 段的最多有多少個單詞。

則轉移方程不難想到:

f i,

j=ma

x(fi

,j,f

l,j−

1+su

ml+1

,i

)f_=max(f_,f_+sum_)

fi,j​=

max(

fi,j

​,fl

,j−1

​+su

ml+1

,i​)

s um

sumsu

m 就是從 j

jj 到 i

ii 的單詞個數

然後 sum

sumsu

m 就可以在前面預處理暴力算出來

#include

using

namespace std;

int p,n,m,k,f[

210][50

],sum[

210]

[210];

string s,a[10]

;bool

check

(int l,

int r)

intmain()

cin>>n;

m=s.

length()

-1;for

(int i=

1;i<=n;i++

) cin>>a[i]

;for

(int i=m;i>=

1;i--

)for

(int j=i;j>=

1;j--

) f[0]

[0]=

0;for(

int i=

1;i<=k;i++

) f[i]

[i]=f[i-1]

[i-1

]+sum[i]

[i];

for(

int i=

1;i<=m;i++

) f[i][1

]=sum[1]

[i];

for(

int i=

1;i<=m;i++

)for

(int j=

1;j<=k&&j)for

(int k=j;k) f[i]

[j]=

max(f[i]

[j],f[k]

[j-1

]+sum[k+1]

[i])

;printf

("%d"

,f[m]

[k])

;return0;

}

洛谷 P1026 統計單詞個數

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

統計單詞個數 洛谷p1026

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

洛谷P1026(統計單詞個數)

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