洛谷P1136 迎接儀式

2022-05-13 17:24:58 字數 1756 閱讀 3303

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

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

輸入格式:

輸入檔案welcome.in的第1行包含2個正整數n與k,表示了序列長度與最多交換次數。

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

輸出格式:

輸出檔案welcome.out僅包括乙個非負整數,為調整最多k次後最後最多能出現多少個「jz」子串。

輸入樣例#1:

5 2 

zzzjj

輸出樣例#1:

2

【樣例說明】

第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]表示決策到第i位字母,j交換了j次,z交換了k次時的「jz」個數。

只有j==k時,答案才有意義。j!=k的情況是中轉狀態:可以看做是把前面的某幾個字元提了出來,等待之後的交換。

原串中s[i]和s[i-1]只有四種可能:「jj」「zz」「jz」「zj」,列舉四種情況決策即可。

warning:f陣列要預先初始化成-inf,以防從不存在的狀態轉移過來。

因為沒有寫上面的這步,剛開始70分,然後越改越低直到10分,怒看題解居然是初始化的問題……

人蠢沒辦法(orz)

1

/*by silvern

*/2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9const

int mxn=521;10

int f[mxn][110][110

];11

char

s[mxn];

12int

n,k;

13int

main()

30if(s[i-1]=='

z' && s[i]=='

z' &&k)

31 f[i][j][k]=max(f[i][j][k],f[i-2][j][k-1]+1

);32

if(s[i-1]=='

z' && s[i]=='

j' && j &&k)35}

36}37for(i=0;imax(f[n][k][k],f[n][i][i]);

38 printf("

%d\n

",f[n][k][k]);

39return0;

40 }

洛谷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的時候...

洛谷 P1136 迎接儀式 題解

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