題意:給出p串字元(每串都是20個字母) 給出k ,k表示總共可以分成幾部分;
給出詞典,這個詞典最多包含6個單詞,
求如何分,能夠得到最多單詞;
注:每份中包含的單詞可以部分重疊。當選用乙個單詞之後,其第乙個字母不能再用
思路:很明顯,這道題應該用dp解法;
首先,我們先將p串字元連成一串
我們需要處理兩部分;
第一部分:預處理:我們先預處理出每乙個區間範圍內的單詞個數;
第二部分:dp【i】【j】表示前i個字元分成k塊
然後便是dp的**
1 #include2using
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...