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表示开 代码 ...
随机推荐
- 使用 jQuery.TypeAhead 让文本框自动完成 (四)(自定义模板)
项目地址:https://github.com/twitter/typeahead.js 直接贴代码了: @section headSection { <script type="te ...
- vs2017离线包下载安装并且不占用C盘空间使用教程
安装vs2017,前提是你的环境是.NET4.6,VS2017在下载好安装程序安装的时候,会根据你选择的功能模块来下载所需要的安装程序,微软.安卓和苹果等平台的SDK.模拟器和第三方扩展功能等会在用户 ...
- k8s修改pod的hosts文件
1.在1.7版本后使用HostAliases修改pod的hosts文件.该文件由kubelet管理 在deployment的yaml文件中添加在pod template 的spec里面即可: apiV ...
- 云原生生态周报 Vol. 14 | K8s CVE 修复指南
业界要闻 Mesosphere 公司正式更名为 D2IQ, 关注云原生. Mesosophere 公司日前发布官方声明正式更名为:D2iQ(Day-Two-I-Q),称关注点转向 Kubernetes ...
- CentOS 配置阿里云 yum 源
CentOS 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的Cent ...
- 使用三层架构+EF添加单元测试
在运行测试的时候抛异常了: “System.InvalidOperationException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理 The Entity Fram ...
- The underlying connection was closed: An unexpected error occurred on a send
操作系统是Windows Server 2003 x64 SP2,使用Framework 4.0,在使用WebClient访问某些特定的HTTPS站点时,会引发异常: Unhandled Except ...
- Linux目录和文件——管理目录和文件的命令
Linux目录和文件——管理目录和文件的命令 摘要:本文主要学习了Linux系统中关于目录和文件的操作. cd命令 cd命令用来切换工作目录,是Change Directory的缩写. 基本语法 cd ...
- 利用Injecttion优化编辑的速度,你不是缺一台性能优化的电脑而是缺一个快速编译的工具~
请前往如下的链接查看优化编译速度: https://www.jianshu.com/p/b2a2f15a3283
- Linux上安装git
Linux上安装git Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 而国外的GitHub和国内的Coding都是项目的托管平台.但是在使用Git工具的时候 ...