洛谷 P1026 統計單詞個數 字典樹 動態規劃

2021-09-29 08:12:48 字數 1413 閱讀 1912

題目大意:給你一串字串,求將這個字串分成k塊的,每塊單獨計算包含單詞個數,他們的總和的最大值,每算乙個單詞之後,該單詞的起點不能再被計算另乙個單詞。

首先建立對已有單詞的字典樹,為之後的計算區間內的單詞樹做準備

計算num[ i ] [ j ],代表i到j區間內,有多少個位置能作為單詞的起點

然後初始化dp[ i ] [ i ]和dp[ i ] [ 1 ]

#include

using namespace std;

int p,k,s,len;

char str[

201]

,ss[

201]

;int trie[

201][26

],tot=

0,pos[

201]

;int dp[

201]

[201

],num[

201]

[201];

void

build

(int t)

pos[root]

=t;}

//建立字典樹

bool sear

(int st,

int en)

return0;

}//計算st位置以後的單詞是否為已有單詞

intmain()

for(

int i=len;i>=

1;i--

)for

(int j=i;j>=

1;j--

)//dp[i][j]代表到第i個位置分成j塊的最大單詞數

for(

int i=

1;i<=k;i++

) dp[i]

[i]=dp[i-1]

[i-1

]+num[i]

[i];

//初始化到第i個位置,且分成i塊的情況

for(

int i=

1;i<=len;i++

) dp[i][1

]=num[1]

[i];

//初始化到第i個位置,只有一塊的情況

for(

int i=

1;i<=len;i++

)for

(int j=

1;j<=k && j)for

(int t=j;t) dp[i]

[j]=

max(dp[i]

[j],dp[t]

[j-1

]+num[t+1]

[i])

;printf

("%d"

,dp[len]

[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 ...