P1026 統計單詞題解

2022-04-12 02:23:35 字數 2479 閱讀 9126

又是一道讓sy coding 1h,除錯2h的好題呢

--------------------(手動分割)-----------------------------------------

傳送看題第一眼:區間\(dp\)!

看題第二眼:好像不是區間\(dp\)

看題第三眼:

@語文老師 老師這段話在說啥???

語文老師不理我並把我丟出去

這段話就是說,把選的所有單詞左對齊,不能有任意乙個短單詞和某個長單詞的前\(len_\)位一樣。將例子中的\(this,th,is\)左對齊之後,發現\(this\)的前2位(也就是\(th\)的長度)和\(th\)是一樣的,所以不能選\(th\)。

感性李姐

好了我們來看怎麼\(dp\)

既然分的段數固定,那麼我們不妨將當前分了幾段加入狀態中。可以自然而然想到\(dp[i][j]\)表示前\(i\)位分成\(j\)份的最大單詞數。顯然,\(dp[i][j]=max\,l \in [j,i-1]\)。其中\(cnt[i][j]\)表示文字串(下標從1開始),\([i,j]\)中有多少個單詞。

那麼\(cnt\)怎麼算呢?由於題目限制於首字母有關,那麼我們可以倒著推,\(cnt[i][j]=cnt[i+1][j]+find(i,j-i+1)\),其中\(find(i,j)\)表示從文字串的第\(i\)位開始,長度為\(j\)的串中是否包含至少乙個模式串,可以用暴力實現。

處理\(cnt\):

int fd(int x,int l)

if(!ok) return 1;//找到之後立刻返回 }

return 0;

} for(int j=tot;j>=1;j--)

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

cnt[i][j]=cnt[i+1][j]+fd(i,j-i+1);//這裡簡寫為fd

最後就是\(dp\)了

#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

typedef unsigned long long ull;

inline ll read()

while(ch>='0'&&ch<='9')

return f?-x:x;

}int p,k,s,dp[209][59],cnt[409][409];

char wb[50][29],mo[8][22],wa[509];

int fd(int x,int l)

if(!ok) return 1;

} return 0;

}int main()

s=read();

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

scanf("%s",mo[i]+1);

for(int j=tot;j>=1;j--)

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

cnt[i][j]=cnt[i+1][j]+fd(i,j-i+1);

for(int i=1;i<=k;i++) dp[i][i]=dp[i-1][i-1]+cnt[i][i];

for(int i=1;i<=tot;i++) dp[i][1]=cnt[1][i];

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

while(ch>='0'&&ch<='9')

return f?-x:x;

}int p,k,s,dp[209][59],cnt[409][409];

char wb[50][29],mo[8][22],wa[509];

int fd(int x,int l)

if(!ok) return 1;

// if(mo[i][1]==wa[x]) return 1;

} return 0;

}int main()

s=read();

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

scanf("%s",mo[i]+1);

for(int j=tot;j>=1;j--)

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

cnt[i][j]=cnt[i+1][j]+fd(i,j-i+1);//,printf("cnt[%d][%d]=%d\n",i,j,cnt[i][j]);

// for(int i=1;i<=k;i++) dp[i][i]=dp[i-1][i-1]+cnt[i][i];

// for(int i=1;i<=tot;i++) dp[i][1]=cnt[1][i];

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

}}

printf("%d",dp[tot][k]);

}

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