洛谷 P1136 迎接儀式 題解

2022-01-10 17:58:08 字數 1988 閱讀 3147

lhx教主要來x市指導oi學習工作了。為了迎接教主,在一條道路旁,一群orz教主er穿著文化衫站在道路兩旁迎接教主,每件文化衫上都印著大字。一旁的orzer依次擺出「歡迎歡迎歡迎歡迎……」的大字,但是領隊突然發現,另一旁穿著「教」和「主」字文化衫的orzer卻不太和諧。

為了簡單描述這個不和諧的佇列,我們用「j」替代「教」,「z」替代「主」。而乙個「j」與「z」組成的序列則可以描述當前的佇列。為了讓教主看得盡量舒服,你必須調整佇列,使得「jz」子串盡量多。每次調整你可以交換任意位置上的兩個人,也就是序列中任意位置上的兩個字母。而因為教主馬上就來了,時間僅夠最多作kk次調整(當然可以調整不滿k次),所以這個問題交給了你。

第一行包含2個正整數n與k,表示了序列長度與最多交換次數。

第二行包含了乙個長度為n的字串,字串僅由字母「j」與字母「z」組成,描述了這個序列。

乙個非負整數,為調整最多k次後最後最多能出現多少個「jz」子串。

輸入 #1 複製

5 2

zzzjj

輸出 #1 複製

【樣例說明】

第1次交換位置1上的z和位置4上的j,變為jzzzj;

第2次交換位置4上的z和位置5上的j,變為jzzjz。

最後的串有2個「jz」子串。

【資料規模與約定】

對於10%的資料,有n≤10;

對於30%的資料,有k≤10;

對於40%的資料,有n≤50;

對於100%的資料,有n≤500,k≤100。

我們設\(f[i][j][k][0]\)為遍歷了字串的前\(i\)位,改變了\(j\)個\(j\)和\(k\)個\(z\),並且當前的這一位為\(j\)所能達到的最大價值

設\(f[i][j][k][1]\)為遍歷了字串的前\(i\)位,改變了\(j\)個\(j\)和\(k\)個\(z\),並且當前的這一位為\(z\)所能達到的最大價值

我們先來考慮\(f[i][j][k][0]\)

如果該字串的第\(i\)位本來是\(z\),那麼我們把它改為\(j\)後,必定不會與前面的字元組成\(jz\),而且必定會花費一次修改操作

因此當前的最大值應該在前面的字元變為\(j\)或變為\(z\)中取

\(f[i][j][k][0]=max(f[i-1][j][k-1][0],f[i-1][j][k-1][1]);\)

如果該字串的第\(i\)位本來是\(j\),那麼我們就不需要進行修改操作

但是,當前的字元仍然不會與前面的字元組成\(jz\)

所以當前的最大值還應該在前面的字元變為\(j\)或變為\(z\)中取

\(f[i][j][k][0]=max(f[i-1][j][k][0],f[i-1][j][k][1]);\)

接下來我們再考慮\(f[i][j][k][1]\)

如果該字串的第\(i\)位本來是\(z\),那麼如果上一位的字元為\(j\),那麼又可以組成乙個\(jz\),如果上一位為\(j\),則不能組成

\(f[i][j][k][1]=max(f[i-1][j][k][0]+1,f[i-1][j][k][1]);\)

如果該字串的第\(i\)位本來是\(j\),那麼我們就需要進行一次修改操作

\(f[i][j][k][1]=max(f[i-1][j-1][k][0]+1,f[i-1][j-1][k][1]);\)

最後我們再在\(j\)和\(k\)相等的方案中取乙個最大值即可

#includeusing namespace std;

const int maxn=505,maxk=105;

int n,m,f[maxn][maxk][maxk][3];

char s[maxn];

int main() else }}

}int ans=0;

for(int i=0;i<=m;i++)

printf("%d\n",ans);

return 0;

}

洛谷P1136 迎接儀式

題目描述 lhx教主要來x市指導oi學習工作了。為了迎接教主,在一條道路旁,一群orz教主er穿著文化衫站在道路兩旁迎接教主,每件文化衫上都印著大字。一旁的orzer依次擺出 歡迎歡迎歡迎歡迎 的大字,但是領隊突然發現,另一旁穿著 教 和 主 字文化衫的orzer卻不太和諧。為了簡單描述這個不和諧的...

洛谷P1136 迎接儀式

lhx教主要來x市指導oi學習工作了。為了迎接教主,在一條道路旁,一群orz教主er穿著文化衫站在道路兩旁迎接教主,每件文化衫上都印著大字。一旁的orzer依次擺出 歡迎歡迎歡迎歡迎 的大字,但是領隊突然發現,另一旁穿著 教 和 主 字文化衫的orzer卻不太和諧。為了簡單描述這個不和諧的佇列,我們...

dp 洛谷P1136 迎接儀式

玄學dp 首先我們發現這道題有些奇怪的性質 交換k次,其實意味著k個j變成z,k個z變成j。而且每個字最多交換一次 但是一次交換,有可能對答案的貢獻 1 也有可能 2 這個怎麼辦呢?f i j k 表示前i個裡面,j 變成 z j次 z 變成 j k次 通過s i 和s i 1 更新 當i k的時候...