洛谷P1026 NOIP2001 統計單詞個數

2021-07-24 04:21:29 字數 920 閱讀 6999

剛看到這個題一直在糾結怎麼劃分成k份再轉移,事實證明我想多了

先預處理出陣列w[i][j],表示從i到j的單詞個數,如果有多個以i開頭的單詞,只統計一次即可

dp[i][j]表示從0到i劃分成j份,則

dp[i][j]=max(dp[k][j-1]+w[k+1][j]|j-1<=k

順便%一下用貪心a掉此題的zy大神

#include#include#include#define f dp

#define maxn 200+2

#define maxk 40+2

#define maxs 6+2

using namespace std;

string dic[maxs],a;

int p,k,s,dp[maxn][maxk];//表示從0到i分成j份

int w[maxn][maxn];//表示從i到j有w[i][j]個單詞

void init(void)

cin>>s;

for(int i=1;i<=s;i++)

cin>>dic[i];

memset(dp,0,sizeof(dp));

memset(w,0,sizeof(w));

for(int i=p*20;i>0;i--)

}w[i][j]+=w[i+1][j];

} }/*for(int i=1;i<=p*20;i++)*/

return;

}int main(){

init();

//dp[i][j]=max(dp[k][j-1]+w[k+1]|k>=j-1)

for(int i=1;i<=p*20;i++){

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

int temp=0;

for(int k0=j-1;k0

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