题目转自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的更多相关文章

  1. HDU 2577 How to Type(dp题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2577 解题报告:有一个长度在100以内的字符串,并且这个字符串只有大写和小写字母组成,现在要把这些字符 ...

  2. HDU 2577 How to Type (线性dp)

    How to Type Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  3. HDU 2577 How to Type DP也可以模拟

    http://acm.hdu.edu.cn/showproblem.php?pid=2577 大意: 大家都打过字吧,现在有个有趣的问题:给你一串字符串,有大写有小写,要求你按键次数最少来输出它,输出 ...

  4. HDU 2577 分情况多维DP

    How to Type Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. HDU 2577 How to Type【DP】

    题意:给出一个字符串,有大写有小写,问最少的按键次数.然后打字的这个人有一个习惯,打完所有的字之后,指示灯要关闭. dp[i][j]表示打到第i个字母,j有0,1两个值表示指示灯开或者关的状态 然后就 ...

  6. HDU 2577 How to Type (DP,经典)

    题意: 打字游戏,求所按的最少次数.给出一个串,其中有大小写,大写需要按下cap键切换到大写,或者在小写状态下按shift+键,这样算两次,打小写时则相反.注意:在打完所有字后,如果cap键是开着的, ...

  7. hdu 2577 How to Type(dp)

    Problem Description Pirates have finished developing the typing software. He called Cathy to test hi ...

  8. hdu 2577 How to Type(DP)

    How to Type Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  9. HDU 2577(DP)

    题意:要求一个字符串输入,按键盘的最少次数.有Caps Lock和Shift两种转换大小写输入的方式 思路:用dpa与dpb数组分别记录Caps Lock的开关状态,dpa表示不开,dpb表示开 代码 ...

随机推荐

  1. 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 ...

  2. java优化细节记录

    此处是为了记录一些优化细节,从网上收集而来,仅供后续代码开发参考使用,如发现更好的,会不断完善 首先确认代码优化的目标是: 减小代码的体积 提高代码运行的效率 代码优化细节 1.尽量指定类.方法的fi ...

  3. 使用selenium爬虫抓取数据

    写在前面 本来这篇文章该几个月前写的,后来忙着忙着就给忘记了.ps:事多有时候反倒会耽误事.几个月前,记得群里一朋友说想用selenium去爬数据,关于爬数据,一般是模拟访问某些固定网站,将自己关注的 ...

  4. ICP&TPS:最近邻

    经过了一段时间的研bai究gei...终于可以偷得几天闲了. 这里来补个档. 无论是ICP还是TPS,缺乏锚点的前提下.你总是要通过找另一个曲面的最近的点来实现你的work beimat:点数*3,f ...

  5. Java使用路径通配符加载Resource与profiles配置使用

    序言 Spring提供了一种强大的Ant模式通配符匹配,能从一个路径匹配一批资源. Ant路径通配符 Ant路径通配符支持“?”.“*”.“**”,注意通配符匹配不包括目录分隔符“/”: “?”:匹配 ...

  6. PHP导出文件到csv函数

    PHP导出文件到CSV函数 function exportCSV($data=array(),$title=array(),$filename) { $encoded_filename = urlen ...

  7. AOP方法拦截获取参数上的注解

    https://www.jianshu.com/p/f5c7417a75f9 获取参数注解 在spring aop中,无论是前置通知的参数JoinPoint,还是环绕通知的参数ProceedingJo ...

  8. 2019-6-15-WPF-触摸到事件

    原文:2019-6-15-WPF-触摸到事件 title author date CreateTime categories WPF 触摸到事件 lindexi 2019-06-15 08:58:54 ...

  9. Oracle查询日期字段是否包含时分秒 TRUNC() 函数

    可以使用 ORACLE TRUNC()函数 来进行判断 表 A 日期字段 datetime 部分数据带时分秒,部分数据没有时分秒 select * from A where datetime = TR ...

  10. javascript:警告(alert 消息对话框),确认(confirm 消息对话框)

    原文:https://blog.csdn.net/u012110719/article/details/41926315