又是一道讓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...