P1026 統計單詞個數

2022-06-02 05:42:12 字數 1175 閱讀 6533

題意:給出p串字元(每串都是20個字母)   給出k ,k表示總共可以分成幾部分;

給出詞典,這個詞典最多包含6個單詞,

求如何分,能夠得到最多單詞;

注:每份中包含的單詞可以部分重疊。當選用乙個單詞之後,其第乙個字母不能再用

思路:很明顯,這道題應該用dp解法;

首先,我們先將p串字元連成一串

我們需要處理兩部分;

第一部分:預處理:我們先預處理出每乙個區間範圍內的單詞個數;

第二部分:dp【i】【j】表示前i個字元分成k塊

然後便是dp的**

1 #include2

using

namespace

std;

3intm;4

string s,dic[10

],ch;

5int num[205][205],dp[205][45];6

bool judge(int l,intr)7

14int

main()

1526 cin>>m;

27for(int i=1;i<=m;i++)

28 cin>>dic[i];

29int len=s.length()-1;30

for(int i=len;i>=1;i--)//

預處理單詞數,i為右端點,j為左端點

3137

}38 dp[0][0]=0;39

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

邊界狀態,到i只分成一塊即1-i的單詞數

40 dp[i][1]=num[1

][i];

41for(int i=1;i<=len;i++)//

列舉右端點,左端點都是max(1,分的段數)

42for(int j=1;j<=k&&j<=i;j++)//

列舉分成了幾段

43for(int l=j;l//

列舉左端點與右端點之間的點

44 dp[i][j]=max(dp[i][j],dp[l][j-1]+num[l+1

][i]);

45 printf("

%d\n

",dp[len][k]);

46return0;

47 }

P1026 統計單詞個數

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

P1026 統計單詞個數

p1026 統計單詞個數 設 f i j 表示到主串第 i 位,已分成 j 段的最多單詞數,val l r 表示區間 l,r 包含的單詞個數 可得 f i j max f i j f u j 1 val u 1 i 套乙個三重迴圈即可 val l r 可以暴力處理 單詞判重用map include ...

P1026 統計單詞個數

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