題三 統計單詞個數(30分)
問題描述
給出乙個長度不超過200的由小寫英文本母組成的字母串(約定;該字串以每行20個字母的方式輸入,且保證每行一定為20個)。要求將此字母串分成k份(1樣例
輸入:
11 3
thisisabookyouareaoh4is
aoksab輸出: //說明:(不必輸出)
7 // this/isabookyoua/reaoh
【思路】
dp+字串。
最優劃分。設d[i][j]表示把前i個數劃分為j段的最大單詞數。則有轉移方程:
d[i][j]=max(d[i][j],d[k][j-1]+sum[k+1][i]);
其中sum(s,t)表示st段內的單詞數,離線計算。
【**】
1 #include2 #include3using
namespace
std;45
const
int maxn = 200+10;6
7string expr="";8
string
words[maxn];
9int
wordslen[maxn],sum[maxn][maxn];
10int
d[maxn][maxn];
11int
p,k,m;
1213
int add(int l,int
r)14;18
for (int i=1;i<=m;i++)
1936}37
}38}39
return
ans;40}
4142
intmain()
49 cin>>m;
50for(int i=1;i<=m;i++)
5455
int len=expr.size();
56for(int i=0;i)
57for(int j=i;j)
6061
for(int i=0;i1;i++)
62for(int j=1;j<=min(k-1,i+1);j++)
63for(int k=j-2;k)
64if(j==1) d[i][j]=sum[0
][j];
65else d[i][j]=max(d[i][j],d[k][j-1]+sum[k+1
][i]);
66int ans=0;67
for(int i=k-1;i1;i++)
68 ans=max(ans,d[i][k-1]+sum[i+1][len-1
]);69 cout<70return0;
71 }
noip2001統計單詞個數
本題字串處理需要注意 單詞個數的計算 先算s i 表示以i開頭的單詞,若有則s i 1,否則為0.這要充分注意題目的要求 考試時很難想到。另外在算 i,j 中單詞的個數時,如果以i為開頭,需要判斷這個單詞結尾有沒有超過j,沒有才可計入。同樣需要注意有些狀態是達不到的,這時若不賦初值在動規時判斷,狀態...
noip2001統計單詞個數
最近,迷戀上debug 1.首先暴力一遍num i j 即從i到j串裡包含多少個子串 注意首字母的使用 2.f i j 表示前i個數劃分j次,最多單詞個數 f i j max f i j f k j 1 num k 1 i 注意j,k範圍 include define re return defin...
NOIP2001 統計單詞個數
p1026 統計單詞個數 給出乙個長度不超過200的由小寫英文本母組成的字母串 約定 該字串以每行20個字母的方式輸入,且保證每行一定為20個 要求將此字母串分成k份 1單詞在給出的乙個不超過6個單詞的字典中。要求輸出最大的個數。輸入格式 每組的第一行有二個正整數 p,k p表示字串的行數 k表示分...