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