洛谷 P1026 統計單詞個數(字串 DP)

2022-04-06 17:13:51 字數 1110 閱讀 1210

關於字串的函式:

1.  s.substr(x,len) 在s中取出從x位置開始,長度為len的字串,並返回string型別的字串。

2.  s.find(a) 在s中查詢字串a,並返回起始下標(從0開始),若不存在,返回1844674407370955161,即(1999999999999999)16.

首先這道題注意關於字串函式的使用。

設f[i][j]表示前i個字元劃分成了j塊時的最大個數。 sum[i][j]表示從第i個位置到第j個位置有多少個單詞。

初始化。

轉移的時候列舉斷點l:

$f[i][j]=max(f[l][j-1]+sum[l+1][i])$

ac**:

1 #include2 #include3

using

namespace

std;

4string s,a[7];5

intn,p,k;

6int sum[805][805],f[805][805];7

bool check(int l,int

r) 12

intmain()

20 scanf("

%d",&n);

21int len=s.length()-1;22

for(int i=1;i<=n;i++) cin>>a[i];

23for(int j=len;j>=1;j--)

24for(int i=j;i>=1;i--)

28 f[0][0]=0;29

for(int i=1;i<=k;i++) f[i][i]=f[i-1][i-1]+sum[i][i];

30for(int i=1;i<=len;i++) f[i][1]=sum[1

][i];

31for(int i=1;i<=len;i++)

32for(int j=1;j<=k&&j)

33for(int l=j;l1]+sum[l+1

][i]);

34 printf("

%d\n

",f[len][k]);

35return0;

36 }

ac**

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