洛谷 P1026 統計單詞個數 區間DP

2022-08-22 11:39:09 字數 1515 閱讀 1279

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

要求輸出最大的個數。

輸入格式:

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

p表示字串的行數;

k表示分為k個部分。

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

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

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

輸出格式:

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

輸入樣例#1:

1 3

thisisabookyouareaoh4is

aoksab

輸出樣例#1:

7
方法挺直接的,先求出每一段字串包含了多少單詞,再求出將整個字串分割成 m 段最多可以獲得多少單詞。

dp[i][j]  表示前 i 個字元組成的串,分割成 j 段,最多能獲得多少單詞。

dp[i][j] = max(dp[k][j-1] + wordnum[k+1][length])   (j-1 <= k <= length-1)

**:

#include #include 

using

namespace

std;

const

int max = 205

;const

int inf = 0x3fffffff

;int wordnum[max][max]; //

i 到 j 這一段包括了多少個單詞

int dp[max][max]; //

剩下的 i 串,分成 j 段最多包含多少單詞

string

s;string words[10

];int

l, m, n;

int dfs(int i, int j); //

列舉 int

main()

cin >>n;

for(int i=1; i<=n; i++)

//求出 dp 陣列

memset(wordnum, 0, sizeof

(wordnum));

for(int len = 1; len <=s.length(); len++)

if(q >=words[x].length())

}wordnum[i][j] = wordnum[i+1][j] + hasword; //

能夠成就加一

} }

memset(dp,

0, sizeof

(dp));

for(int i=0; i)

for(int j=2; j<=m; j++)}}

cout

<< dp[s.length()-1

][m];

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