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表示开 代码 ...
随机推荐
- Debug 路漫漫-12:Python: ValueError: 'userid' is both an index level and a column label, which is ambiguous.
啊,又遇到难题了 == 想要对两个 dataframe 做自然连接 merge,连接的key 为 “userid”,但是报错:ValueError: 'userid' is both an index ...
- java优化细节记录
此处是为了记录一些优化细节,从网上收集而来,仅供后续代码开发参考使用,如发现更好的,会不断完善 首先确认代码优化的目标是: 减小代码的体积 提高代码运行的效率 代码优化细节 1.尽量指定类.方法的fi ...
- 使用selenium爬虫抓取数据
写在前面 本来这篇文章该几个月前写的,后来忙着忙着就给忘记了.ps:事多有时候反倒会耽误事.几个月前,记得群里一朋友说想用selenium去爬数据,关于爬数据,一般是模拟访问某些固定网站,将自己关注的 ...
- ICP&TPS:最近邻
经过了一段时间的研bai究gei...终于可以偷得几天闲了. 这里来补个档. 无论是ICP还是TPS,缺乏锚点的前提下.你总是要通过找另一个曲面的最近的点来实现你的work beimat:点数*3,f ...
- Java使用路径通配符加载Resource与profiles配置使用
序言 Spring提供了一种强大的Ant模式通配符匹配,能从一个路径匹配一批资源. Ant路径通配符 Ant路径通配符支持“?”.“*”.“**”,注意通配符匹配不包括目录分隔符“/”: “?”:匹配 ...
- PHP导出文件到csv函数
PHP导出文件到CSV函数 function exportCSV($data=array(),$title=array(),$filename) { $encoded_filename = urlen ...
- AOP方法拦截获取参数上的注解
https://www.jianshu.com/p/f5c7417a75f9 获取参数注解 在spring aop中,无论是前置通知的参数JoinPoint,还是环绕通知的参数ProceedingJo ...
- 2019-6-15-WPF-触摸到事件
原文:2019-6-15-WPF-触摸到事件 title author date CreateTime categories WPF 触摸到事件 lindexi 2019-06-15 08:58:54 ...
- Oracle查询日期字段是否包含时分秒 TRUNC() 函数
可以使用 ORACLE TRUNC()函数 来进行判断 表 A 日期字段 datetime 部分数据带时分秒,部分数据没有时分秒 select * from A where datetime = TR ...
- javascript:警告(alert 消息对话框),确认(confirm 消息对话框)
原文:https://blog.csdn.net/u012110719/article/details/41926315