DP问题(1) : hdu 2577
题目转自hdu 2577,题目传送门
题目大意:
现给你n个区分大小写的字符串,大小写可用Caps Lock和shift切换(学过计算机的都知道)
但是有一点需要注意(shift是切换,若现在是大写锁定,用shift可切换成小写)
解题思路:
这道题一开始拿的时候,就觉得是n2的dp
但是,转移方程一直没想出来(0.25h)
后来又仔细想想,发现是2n的dp
然后想了想,20min就切了
我们先将字符串做预处理,形成一个01字符串
像这个测试数据:
HELlowORLd
可以转换成这样:
然后,就可以写转移方程了
如果目前的字符需要大写,就是这样:
dp[i][]=min(dp[i-][]+,dp[i-][]+)+;
dp[i][]=min(dp[i-][]+,dp[i-][])+;
dp[i][0]代表第i个字符,有大写锁定,dp[i][1]代表第i个字符,无大写锁定
若不需要大写,则是这样:
dp[i][]=min(dp[i-][]+,dp[i-][])+;
dp[i][]=min(dp[i-][]+,dp[i-][]+)+;
(意思自己理解,暴怒蒟蒻在线虐人)
然后就很简单了,AC代码如下(码风清奇,请勿怪罪)
#include<bits/stdc++.h>
using namespace std;
char s[];
int n,t[],dp[][];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
memset(t,,sizeof(t));
scanf("%s",&s);
int l=strlen(s);
for(int i=;i<l;i++) if(s[i]>= && s[i]<=) t[i]=;//预处理
dp[][]=;
if(t[]==) dp[][]=;
else dp[][]=;//初始化
for(int i=;i<l;i++)
{
if(t[i]==)
{
dp[i][]=min(dp[i-][]+,dp[i-][]+)+;
dp[i][]=min(dp[i-][]+,dp[i-][])+;
}
else
{
dp[i][]=min(dp[i-][]+,dp[i-][])+;
dp[i][]=min(dp[i-][]+,dp[i-][]+)+;
}//转移方程
}
printf("%d\n",min(dp[l-][],dp[l-][]+));//还需要比较
}
return ~~(-);//装个13
}
就这样,这道题就可以轻松AC了......
DP问题(1) : hdu 2577的更多相关文章
- HDU 2577 How to Type(dp题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2577 解题报告:有一个长度在100以内的字符串,并且这个字符串只有大写和小写字母组成,现在要把这些字符 ...
- HDU 2577 How to Type (线性dp)
How to Type Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 2577 How to Type DP也可以模拟
http://acm.hdu.edu.cn/showproblem.php?pid=2577 大意: 大家都打过字吧,现在有个有趣的问题:给你一串字符串,有大写有小写,要求你按键次数最少来输出它,输出 ...
- HDU 2577 分情况多维DP
How to Type Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 2577 How to Type【DP】
题意:给出一个字符串,有大写有小写,问最少的按键次数.然后打字的这个人有一个习惯,打完所有的字之后,指示灯要关闭. dp[i][j]表示打到第i个字母,j有0,1两个值表示指示灯开或者关的状态 然后就 ...
- HDU 2577 How to Type (DP,经典)
题意: 打字游戏,求所按的最少次数.给出一个串,其中有大小写,大写需要按下cap键切换到大写,或者在小写状态下按shift+键,这样算两次,打小写时则相反.注意:在打完所有字后,如果cap键是开着的, ...
- hdu 2577 How to Type(dp)
Problem Description Pirates have finished developing the typing software. He called Cathy to test hi ...
- hdu 2577 How to Type(DP)
How to Type Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 2577(DP)
题意:要求一个字符串输入,按键盘的最少次数.有Caps Lock和Shift两种转换大小写输入的方式 思路:用dpa与dpb数组分别记录Caps Lock的开关状态,dpa表示不开,dpb表示开 代码 ...
随机推荐
- antd模块组件文档思维导图整理
- javascript判断mp3是否播放完
javascript判断mp3是否播放完 var audio=document.getElementById('audio'); if(audio){ audio.loop = false; audi ...
- Python 多进程池
def get_html(n): time.sleep(n) print("sub_progress success") return n # 多进程池 pool = multip ...
- docker容器的端口映射
1.创建一个Nginx 容器,先不映射端口 [root@localhost ~]# docker run --name my_nginx -d nginx 7be3673a4c0f8f7ffe79a7 ...
- 状态(State)模式--设计模式
定义与特点 1.1 定义 状态模式允许一个对象在其内部状态改变的时候改变其行为.这个对象看上去就像是改变了它的类一样. 1.2 特点 状态模式优点: 封装了转换规则,并枚举可能的状态,它将所有与某个状 ...
- Zabbix图表中文乱码(包含Docker安装乱码)
目录 Zabbix 4.0 版本 Zabbix 3.0 版本 Zabbix 4.0 Docker 版本 图表乱码问题解决 文章github 地址: 点我 最近在看 Zabbix 4.0 版本的官方文档 ...
- 基本认证(Basic Authorization)
---------------------------------- import arcpy from base64 import encodestring username = 'xxx' pas ...
- .NET基础知识(01)-值类型与引用类型
常见面试题目: 1. 值类型和引用类型的区别? 2. 结构和类的区别? 3. delegate是引用类型还是值类型?enum.int[]和string呢? 4. 堆和栈的区别? 5. 什么情况下会在堆 ...
- 修复dtcms5.0后台管理编辑器上传视频和图片被过滤问题
1.原程序代码调用上传接口文件路径更改为父节点相对路径: 2.修复ueditor.config.js配置: img: ['src', 'alt', 'title', 'width', 'height' ...
- 1. mvc 树形控件tree + 表格jqgrid 显示界面
1.界面显示效果 2.资源下载 地址 1. jstree https://www.jstree.com/ 2.表格jqgrid https://blog.mn886.net/jqGrid/ ...