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次調整 當然可以調整...