标签:区间DP

题目描述

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。

分析:

给定:长度为N的字符串

求:max{num”jz”}(字符串中“jz”这个子串最多个数)

满足:交换任意两个字符的次数<=k

贪心:从前往后找到第一个未形成“jz”的z,将第一个“z”换成当前第一个未形成”jz“的“j”

Eg.

Zzzjj

P=2,q=4;

jzzzj

P=4 q=5

符合样例,但是只有20分

显然这种n<=500的数据范围是不可能贪心的,反例如下

7 1

Jjjzzzj

正解:DP

F[i][j1][j2]表示前i个字符,改变了j1个‘j’和j2个’z’后的’jz’个数

状态转移方程

F[i][j1][j2]=max(f[i-1][j1][j2],  //未做任何变动

F[i-2][j1-1][j2]+1  //s[i]=j,s[i-1]=j的情况(就是“jj”)

F[i-2][j1][j2-1]+1  //s[i]=z,s[i-1]=z(两个z的情况)

F[i-2][j1-1][j2-1]+1  )//s[i]=j,s[i-1]=z (“zj”的情况)

Ans=max(f[i][j1][j2]) (满足j1=j2)

Code

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dep(i,a,b) for(int i=a;i>=b;i--)
#define mem(x,num) memset(x,num,sizeof x)
#define LL long long
using namespace std;
const int maxn=506,maxk=106,inf=0x3f3f3f;
char s[maxn];
int f[maxn][maxk][maxk],n,k,ans=0;int main()
{scanf("%d%d",&n,&k);scanf("%s",s+1);mem(f,-inf);f[0][0][0]=f[1][0][0]=0;if(s[1]=='j')f[1][1][0]=0;else f[1][0][1]=0;rep(i,2,n)rep(j1,0,k)rep(j2,0,k){f[i][j1][j2]=f[i-1][j1][j2];if(s[i]=='z'&&s[i-1]=='j')f[i][j1][j2]=max(f[i][j1][j2],f[i-2][j1][j2]+1);if(s[i]=='z'&&s[i-1]=='z'&&j2)f[i][j1][j2]=max(f[i][j1][j2],f[i-2][j1][j2-1]+1);if(s[i]=='j'&&s[i-1]=='j'&&j1)f[i][j1][j2]=max(f[i][j1][j2],f[i-2][j1-1][j2]+1);if(s[i]=='j'&&s[i-1]=='z'&&j1&&j2)f[i][j1][j2]=max(f[i][j1][j2],f[i-2][j1-1][j2-1]+1);if(j1==j2)ans=max(ans,f[i][j1][j2]);}printf("%d\n",ans);return 0;
}

洛谷1136 迎接仪式相关推荐

  1. 洛谷 P1136 迎接仪式 解题报告

    P1136 迎接仪式 题目描述 LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一旁的Orzer依次摆出&q ...

  2. 洛谷 P1136 迎接仪式

    题目描述 LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一旁的Orzer依次摆出"欢迎欢迎欢迎欢 ...

  3. P1136 迎接仪式

    P1136 迎接仪式 题目描述 LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一旁的Orzer依次摆出&q ...

  4. 洛谷刷题C语言:陶瓷项链、Cow Gymnastics B、Where Am I? B、Hello, 2020!、SIR 模型

    记录洛谷刷题C语言 一.[NOI2000] 瓷片项链 题目描述 原始部落用一种稀有的泥土烧制直径相同的圆瓷片并串成项链,串的时候沿瓷片的直径方向顺次连接,瓷片之间没有空隙也不重叠,一条项链至少由一个瓷 ...

  5. 【暑期每日一题】洛谷 P5886 Hello, 2020!

    题目链接:P5886 Hello, 2020! - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目背景 时针与分针重合在「零」的那一霎那,嘀嗒声便宣告了新一年的到来. 在过去的一年 ...

  6. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  7. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  8. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  9. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

最新文章

  1. iOS 用自签名证书实现 HTTPS 请求的原理实例讲解
  2. 量子计算机功率,美国物理学家证明光纤可提升超导量子计算机的功率
  3. Android6.0 禁止自动同步网络时间
  4. 循环神经网络教程3-BP算法和梯度消失问题, Part 3 – Backpropagation Through Time and Vanishing Gradients
  5. MAT之GA:利用GA对一元函数进行优化过程,求x∈(0,10)中y的最大值
  6. EOS 共识机制 (1)DPOS共识介绍
  7. 此情应是长相守 你若无心我便休
  8. 关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决...
  9. 阿里云mysql可视化_MySql可视化工具MySQL Workbench使用教程
  10. 计算机八进制 算法视频,八进制算法
  11. MSE 支持 Apache Shenyu 网关实现全链路灰度
  12. Flask:工厂函数和蓝本
  13. 解决加载libqxcb.so失败以及Linux库搜索顺序
  14. ECHARTS的基本使用:柱状图、折线图、饼图等
  15. 电路级静电防护设计技巧与ESD防护方法
  16. 【在Linu系统下安装 TeXstudio、mplayer、WPS、Python、mendeley、WeChat、搜狗输入法】
  17. 使用中文维基百科语料库训练一个word2vec模型
  18. 创意计算机手机,北京市大学生计算机应用大赛——3G智能手机创意设计作品提交书模板(游戏类).doc...
  19. python根据掩模坐标提取数据
  20. 高德地图三维实景导航:立体实景指引更清晰,复杂路口不再犹豫

热门文章

  1. java数组赋值给js数组_java数组
  2. vue,v-html如何识别\n换行符
  3. 生活随记-祝福表妹安好
  4. L3-008 喊山 (30 分)
  5. android kswapd0 白话理解
  6. 上一万阅读量,可喜可贺
  7. Linux ~ shell。
  8. Kubernetes 触发 OOMKilled(内存杀手)如何排除故障
  9. 下一个经过基因编辑的婴儿可能没有镰状细胞或肌营养不良症
  10. ×××错误651解决方法