u122 迎接儀式

2021-09-28 09:56:55 字數 2595 閱讀 3456

time limit: 1 second

memory limit: 128 mb

【問題描述】

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」子串。

【資料規模】

對於10%的資料,有n≤10; 對於30%的資料,有k≤10; 對於40%的資料,有n≤50; 對於100%的資料,有n≤500,k≤100。

sample input1

5 2

zzzjj

sample output1

【樣例說明】

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

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

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

【題目鏈結】:

【題解】

把j和z轉換成0和1;

則原問題等價於,在字串裡面進行小於k次操作;

使得字串中子串」01」的個數達到最大;

j和z的交換可以看成是把1變成0和0變成1的過程;

設f[i][x][y]表示前i個字元裡面經過了x次0變成1,y次1變成0的過程所得到的最大」01」子串個數;

可以列舉i-1,i這兩個位置的字元要不要變成01子串,即s[i-1]變成0,s[i]變成1;

這樣問題就轉換成前i-2個字元的問題了;

至於f[i-2]中的2、3維是什麼狀態,就根據i-1和i的情況來確定:

因為列舉了所有的i-1和i是01子串的情況。所以能夠考慮到所有情況;

最後在f[n][i][i]中找答案就可以了;表示0和1的轉換次數一樣->相當於交換;

其次往前轉移的時候,f[i-2]的這個狀態必須要存在才行;不然會造成錯解;

比如f[3][4][4];則必須先有f[3][4][3]的狀態或f[3][3][3],f[3][3][4]的狀態;

不能直接從f[3][0][0]跳到f[3][4][4];

【完整**】

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define ll long long

#define rep1(i,a,b) for (int i = a;i <= b;i++)

#define rep2(i,a,b) for (int i = a;i >= b;i--)

#define mp make_pair

#define pb push_back

#define fi first

#define se second

typedef pair pii;

typedef pairpll;

void rel(ll &r)

void rei(int &r)

const

int maxn = 500+10;

const

int dx[9] = ;

const

int dy[9] = ;

const

double pi = acos(-1.0);

int n,k;

char s[maxn];

int a[maxn];

int f[maxn][100+10][100+10];

int main()

if (a[i-1]==0)

}if (a[i]==1)

if (a[i-1]==1)}}

int ans = 0;

rep1(i,0,k)

ans = max(ans,f[n][i][i]);

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

return

0;}

P1136 迎接儀式

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

洛谷1136 迎接儀式

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

jzoj P1330 迎接儀式

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