How to Type

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 4616    Accepted Submission(s): 2084

Problem Description

Pirates have finished developing the typing software. He called Cathy to test his typing software. She is good at thinking. After testing for several days, she finds that if she types a string by some
ways, she will type the key at least. But she has a bad habit that if the caps lock is on, she must turn off it, after she finishes typing. Now she wants to know the smallest times of typing the key to finish typing a string.
 

Input

The first line is an integer t (t<=100), which is the number of test case in the input file. For each test case, there is only one string which consists of lowercase letter and upper case letter. The length
of the string is at most 100.
 

Output

For each test case, you must output the smallest times of typing the key to finish typing this string.
 

Sample Input

3
Pirates
HDUacm
HDUACM
 

Sample Output

8
8
8
Hint
The string “Pirates”, can type this way, Shift, p, i, r, a, t, e, s, the answer is 8.
The string “HDUacm”, can type this way, Caps lock, h, d, u, Caps lock, a, c, m, the answer is 8
The string "HDUACM", can type this way Caps lock h, d, u, a, c, m, Caps lock, the answer is 8
 

Author

Dellenge
 

Source

HDU 2009-5 Programming Contest



题目链接:

pid=2577">http://acm.hdu.edu.cn/showproblem.php?pid=2577



题目大意:坑比题,给一些有大写和小写组成的字符串,问用键盘打出它们的最少按键次数

按键规则:对于每个小写字母。加上shift可使其变成大写。注意shift不能够一直按着不放,还能够开大写锁Caps lock键,按完这键输入就变成大写,此时再按shift。则打出小写(mac的键盘貌似不是这样),注意每次大写锁,最后必须把它关上



题目分析:知道题以后就非常easy了dp[i][0]和dp[i][1]分别表示到第i个字符大写锁关,开着时要按的最少次数,则有4种情况

假设到第i个字符为小写且此时开着大写锁,则它前一个必定是大写,由于假设前一个是小写,当前也是小写。我显然不须要开大写锁

dp[i][1] = dp[i - 1][1] + 2

假设到第i个字符为小写且此时没开大写锁,直接打即可了

dp[i][0] = dp[i - 1][0] + 1

假设到第i个字符为大写且此时开着大写锁。则为前一个开着大写锁的情况加1和前一个没开大写锁的情况加2的最小值,表示开锁

dp[i][1] = min(dp[i - 1][1] + 1, dp[i - 1][0] + 2)

假设到第i个字符为大写且此时没开大写锁。则为前一个没开大写锁的情况加2(按shift)和前一个开着大写锁的情况加2的最小值。表示关锁

dp[i][0] = min(dp[i - 1][0] + 2, dp[i - 1][1] + 2)

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int const MAX = 105;
char s[MAX];
int dp[MAX][2]; bool judge(char ch)
{
if(ch >= 'A' && ch <= 'Z')
return true;
return false;
} int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%s", s + 1);
int len = strlen(s + 1);
memset(dp,0, sizeof(dp));
dp[0][1] = 1;
for(int i = 1; i <= len; i++)
{
if(judge(s[i]))
{
dp[i][1] = min(dp[i - 1][1] + 1, dp[i - 1][0] + 2);
dp[i][0] = min(dp[i - 1][0] + 2, dp[i - 1][1] + 2);
}
else
{
dp[i][1] = dp[i - 1][1] + 2;
dp[i][0] = dp[i - 1][0] + 1;
}
}
printf("%d\n", min(dp[len][0], dp[len][1] + 1));
}
}

HDU 2577 How to Type (线性dp)的更多相关文章

  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】

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

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

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

  5. hdu 2577 How to Type(dp)

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

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

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

  7. HDU 2577 分情况多维DP

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

  8. HDU 2709 Sumsets 经典简单线性dp

    Sumsets Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  9. HDU 3455 Leap Frog(线性DP)

    Problem Description Jack and Jill play a game called "Leap Frog" in which they alternate t ...

随机推荐

  1. input[type=date]

    ::-webkit-datetime-edit – 控制编辑区域的 ::-webkit-datetime-edit-fields-wrapper – 控制年月日这个区域的 ::-webkit-date ...

  2. 23种JavaScript设计模式

    原文链接:https://boostlog.io/@sonuton/23-javascript-design-patterns-5adb006847018500491f3f7f 转自: https:/ ...

  3. hiho week 38 P1 : 二分·二分答案

    P1 : 二分·二分答案 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 在上一回和上上回里我们知道Nettle在玩&l ...

  4. Windows server 2016 解决“无法完成域加入,原因是试图加入的域的SID与本计算机的SID相同。”

    使用克隆的系统时,加域是出现如下问题.“无法完成域加入,原因是试图加入的域的SID与本计算机的SID相同.” 问题原因:Windows使用SID来表示所有的安全对象(security principa ...

  5. 大型情感类电视连续剧--Android高德之旅(2)地图类型

    总要说两句 今天继续我们的Android高德之旅,上一篇已经能够显示最主要的地图了.有主要的放大缩小功能.还有最后做的点击3D旋转.倾斜视角的效果.今天这篇文章来记录一下高德地图的5种地图类型. (其 ...

  6. docker -mysql服务设置远程连接 解决1251 client does not support ..问题

    前提: 安装MYSQL实例 docker pull mysql 启动mysql(做了端口映射) [root@localhost ~]# docker run -p 3306:3306 --name m ...

  7. ajax 使用 与 缓存问题

    1:GET访问 浏览器 认为 是等幂的 就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配] 所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结 ...

  8. Javascript函数的基本概念+匿名立即执行函数

    函数声明.函数表达式.匿名函数 函数声明:function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = f ...

  9. Mysql主从级联复制

    场景1 如果主节点已经运行了一段时间,且有大量数据时,如何配置并启动slave节点 通过备份恢复数据至从服务器· 复制起始位置为备份时,二进制日志文件及其POS: Mater 设置 1) 修改配置文件 ...

  10. Android 关于::app:clean :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DATE,引用jar冲突问题

    错误提示: Information:Gradle tasks [:app:clean, :app:generateDebugSources, :app:generateDebugAndroidTest ...