A. 【美团杯2020】查查查乐乐

“查查查乐乐”是一段古老神秘的咒语,只有被选中的魔法师才有资格使用这一段咒语并享用它所带来的力量;而如果这段咒语出现在了不具资格的魔法师的口中,这个魔法师将会遭到咒语的反噬并付出可怕的代价。

这个学期,镁团在一家魔法早教学校做兼职,他的任务是教小学生们魔法并帮助他们准备一年一度的全国魔法奥林匹克竞赛 (NOMP)。今天,镁团在整理图书的时候,突然发现一本课外教材中包含了 t 段只由查和乐组成的咒语。让小学生们阅读这些咒语是非常危险的:他们可能会在无意识中念出“查查查乐乐”。

因此,作为一名富有责任心的儿童教师,镁团打算修改这些咒语,从而最大程度地杜绝这方面的隐患。镁团认为一段由查和乐组成的咒语是危险的当且仅当在删去咒语中的若干个字(也可以不删)后,剩下的咒语可能变成查查查乐乐。举例来说,“查查查乐乐”,“查查乐查乐乐” 就是危险的,而 “乐乐查查查”,“乐查乐乐查乐查查”就不是危险的。

对于每一段咒语,镁团都可以选择若干个位置并对这些位置进行修改:他可以把“查”变成“乐”,也可以把“乐”变成“查”。为了最大限度地保留教学效果,镁团希望使用尽可能少的修改来消除所有的危险性:对于每一段咒语,镁团都希望你帮他计算一下最少的修改次数。

输入格式
输入第一行是一个整数 t(1≤t≤1000),表示咒语的数量。

对于每组数据,输入包含一行一个只包含字符 x 和 l 的字符串 s(1≤|s|≤100),描述了一段咒语。其中 x 表示“查”,l 表示 “乐”。

输出格式
对于每段咒语,输出一行一个整数表示最少的修改次数。

样例一
input
3
xxxll
xxlxllllxl
xxxxxlllll

output
1
1
3

explanation
对于三段咒语,我们分别给出一种让修改次数最小的方案:

xxlll,修改了第 3 个字。
xxllllllxl,修改了第 4 个字。
xxllllllll, 修改了第 3,4,5 个字。
限制与约定
Small Task: n≤10
Large Task: n≤100。

时间限制:2s
空间限制:512MB

思路:
题目的意思是给我们一个序列,让我们要修改一些字符,使这个序列不存在xxxll的子序列
我们定义一个dp数组表示当前的修改次数
dp[1]表示不存在x序列的修改次数
dp[2]表示不存在xx序列的修改次数
dp[3]表示不存在xxx序列的修改次数
dp[4]表示不存在xxxl序列的修改次数
dp[5]表示不存在xxxll序列的修改次数
这样dp数组的初始值都为0
我们在遇到x的时候,不能出现的序列是x,xx,xxx,这时我们可以修改当前的x,也可以修改前i-1个的x,这样都不能构成xxxll序列,修改次数就有dp[1] = dp[1] + 1,由于要求最小值,所以dp[2] = min(dp[1],dp[2] + 1),同理dp[3] = min(dp[2],dp[3] + 1)
我们在遇到l的时候,前面不能出现的序列是xxxl和xxxll,同理可以修改当前的l,也可以修改l之前的x,所以dp[4] = min(dp[3],dp[4] + 1),同理dp[5] = min(dp[4],dp[5] + 1)
这样dp方程就出来了,只需要在for循环中判断当前的字符是x还是l即可

int dp[6];
char s[101];int main(){int T; scanf("%d",&T);while(T--){dp[1] = dp[2] = dp[3] = dp[4] = dp[5] = 0; // dp数组初始化scanf("%s",s+1);for(int i=1;s[i];i++){if(s[i] == 'x'){dp[3] = min(dp[2], dp[3] + 1);dp[2] = min(dp[1], dp[2] + 1);dp[1] = dp[1] + 1;}else{dp[5] = min(dp[4], dp[5] + 1);dp[4] = min(dp[3], dp[4] + 1);}} printf("%d\n",dp[5]);}return 0;
}

美团杯2020:查查查乐乐(dp)相关推荐

  1. 【美团杯2020】字符串处理:查查查乐乐

    美团杯:签到题 我:一个小时自闭题 查查查乐乐 [题目] "查查查乐乐"是一段古老神秘的咒语,只有被选中的魔法师才有资格使用这一段咒语并享用它所带来的力量:而如果这段咒语出现在了不 ...

  2. 美团杯2020 - 半前缀计数(后缀自动机)

    题目链接:点击查看 题目大意: 蒜斜刚来PKU的时候还不知道有"北大算协"这个社团,因此他总是觉得周围的人在偷偷议论着他,比如说: "算协(注:非蒜斜)举办的活动好有趣啊 ...

  3. 美团杯2020 - 平行四边形(原根)

    题目链接:点击查看 题目大意: 蒜斜非常喜欢下围棋.自从AlphaOg面世以来,他就立志一定要研究出AlphaOg的破绽. 终于,他发现当AlphaOg遇到一种特殊局面后,它的神经网络会自动输出&qu ...

  4. 【美团杯2020】114514 解题报告

    原题地址:http://uoj.ac/contest/53/problem/529 这题说实话我觉得有点玄学.我的方法是从左到右贪心,优先给每个4分配两个1,1不够的时候就再取出来.虽然我也意识到思路 ...

  5. 【UOJ529】【美团杯2020】114514

    题目链接 点击打开链接 题目解法 可以发现,在给定的序列 114514 114514 114514 中,每个 4 4 4 之前均有一个 1 1 1 . 因此,从后向前,将每个 4 4 4 与前方最近的 ...

  6. 蓝桥杯2020年第十一届C/C++B组(第二次)省赛习题题解

    目录 试题A.门牌制作(拆分数字) 试题 B 既约分数(gcd) 试题C 蛇形填数(数学) 试题D 跑步锻炼(模拟) 试题E 七段码(图论+并查集) 试题F:成绩统计(格式化输出) 试题G:回文日期( ...

  7. [羊城杯 2020]Power

    [羊城杯 2020]Power 题目 from Crypto.Util.number import * import gmpy2 from secret import flagp = getPrime ...

  8. [网鼎杯 2020 青龙组]jocker

    [网鼎杯 2020 青龙组]jocker SMC(self-Modifying Code): 自修改代码,程序在执行某段代码的过程中会对程序的代码进行修改,只有在修改后的代码才是可汇编,可执行的.在程 ...

  9. [网鼎杯 2020 朱雀组]Think Java

    [网鼎杯 2020 朱雀组]Think Java 文章目录 [网鼎杯 2020 朱雀组]Think Java 获取源文件 Swagger JDBC sql注入 关于#的使用 查看数据库名字 获取表名 ...

最新文章

  1. 无限城市助力智慧城市 挥毫创新3.0时代
  2. iOS开发 QQ粘性动画效果
  3. websocket协议
  4. 获取android系统手机的铃声和音量
  5. java 登陆实例,2021-03-19 java案例:用户登录
  6. 通俗了解神经网络如何避免陷入局部最优
  7. html 闪白光效果,css3实现图片划过一束光闪过成效
  8. 美容美发门店预约下单小程序开发制作
  9. 深扒 | AI艺术品的另类产业链
  10. numpy.max() , sum()
  11. 2021年危险化学品经营单位主要负责人考试资料及危险化学品经营单位主要负责人考试技巧
  12. 【论文晨读】一种移动机器人全局最优路径规划算法 孟 偲2008
  13. 怎么做web接口测试
  14. 北大青鸟 JQuery制作特效 第二章 (上机练习
  15. 国内即时通讯工具介绍
  16. c语言上机总结报告,C语言程序设计上机实践心得报告
  17. HMC7044芯片配置总结
  18. 用js来判断用户端浏览器(判断QQ浏览器、谷歌浏览器)方法
  19. python index out of bounds_错误:索引2超出大小为1的轴0的界限
  20. 2021-07-08 斜率

热门文章

  1. NSIS制作软件安装包
  2. 【计算机网络】BitTorrent技术对网络的潜在危害
  3. 什么是兴趣点 (POI)
  4. python采集银行信息_Python:将银行扣费信息整理成账单
  5. Office 365 函数之Concatenate 字符连接函数
  6. 破解NET的四大神器(转)
  7. Java实现音频格式转换 WAV---mp3,可使音频压缩
  8. 一个好用的流氓软件清理工具合集
  9. CTFshow_web入门_文件包含
  10. Ubuntu系统 E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)