How to Type

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4658    Accepted Submission(s): 2110

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

题意就是每组给一个字符串,问你打出这个字符串须要敲多少次键盘要求打完后CapsLock保持关闭.(注意按一次Shift仅仅能输入一个字母,同一时候在CapsLock开启时使用Shift能输入小写字母).
作为菜鸟。下边是看大神的分析::: 
这题能够直接将连续的(大写和小写同样的)字母依据长度分为长度为1和长度为1以上的来处理,一遍遍历后得出结果(复杂度O(n)),当然也能够使用DP来做.
这里给出DP的做法.
对于每个字符,针对输入前后CapsLock开启关闭状态分类

若输入后CapsLock关闭
假如输入前关闭,则要么直接输入(小写字母),要么用Shift+当前字母输入(大写字母)
假如输入前开启,要么先输入当前字母再按CapsLock(当前字母是大写的),要么先按CapsLock再输入字母(当前字母小写),都是按两次
若输入后CapsLock开启
假如输入前开启,则要么直接输入(大写字母),要么用Shift+当前字母输入(小写字母)
假如输入前关闭,要么先输入当前字母再按CapsLock(当前字母是小写的),要么先按CapsLock再输入字母(当前字母大写),都是按两次
由此能够得出状态转移方程
我们用DP[i][0]来代表输入第i个字母后且CapsLock关闭的情况下须要的最少次数,用DP[i][1]来代表输入第i个字母后且CapsLock开启的情况下须要的最少次数,并定义函数int check(char ch),若ch为大写字母,则返回1,否则返回0,则有
dp[i][0]=min(dp[i-1][0]+check(s[i])+1,dp[i-1][1]+2)
dp[i][1]=min(dp[i-1][0]+2,dp[i-1][1]+2-check(s[i]))
特殊的,当i==0时
dp[0][0]=check(s[i])+1
dp[0][1]=2
多练,,,。2015,7,21

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char s[110];
int dp[110][2];
int check(char a)
{
if(a>='A'&&a<='Z')
return 1;
return 0;
}
int main()
{
int t,i,len;
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
len=strlen(s);
for(i=0;i<len;i++)
{
if(i==0)
{
dp[i][0]=check(s[0])+1;
dp[i][1]=2;
}
else
{
dp[i][0]=min(dp[i-1][0]+check(s[i])+1,dp[i-1][1]+2);
dp[i][1]=min(dp[i-1][1]+2-check(s[i]),dp[i-1][0]+2);
}
}
printf("%d\n",dp[len-1][0]);
}
return 0;
}

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 (字符串处理)

    题目链接 Problem Description Pirates have finished developing the typing software. He called Cathy to te ...

  3. HDU 1864 最大报销额(DP)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1864 题目: 最大报销额 Time Limit: 1000/1000 MS (Java/Others) ...

  4. HDU 2639 Bone Collector II (dp)

    题目链接 Problem Description The title of this problem is familiar,isn't it?yeah,if you had took part in ...

  5. HDU 4562 守护雅典娜(dp)

    守护雅典娜 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submi ...

  6. HDU - 6199 gems gems gems (DP)

    有n(2e4)个宝石两个人轮流从左侧取宝石,Alice先手,首轮取1个或2个宝石,如果上一轮取了k个宝石,则这一轮只能取k或k+1个宝石.一旦不能再取宝石就结束.双方都希望自己拿到的宝石数比对方尽可能 ...

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

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

  8. HDU - 6357 Hills And Valleys(DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=6357 题意 给一个数值范围为0-9的a数组,可以选择翻转一个区间,问非严格最长上升子序列,以及翻转的区间. 分析 ...

  9. HDU 1069 Monkey and Banana (dp)

    题目链接 Problem Description A group of researchers are designing an experiment to test the IQ of a monk ...

随机推荐

  1. cocoapod卡在了analyzing dependencies

    尽管公司的项目没有使用cocoapod,可是有一些第三方库本身依赖其它第三方的库,而且是用cocoapod来管理这些依赖的.所以在使用某些第三方库时.还是须要用到cocoapod的.今天在github ...

  2. jquery--this

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  3. 10lession-if-else条件语句

    python的条件选择语句跟其他语言的及其相似,这里就不做详细记录,仅仅是看个例子好了 #!/usr/bin/python "]: print('1 in [1,2,3,"4&qu ...

  4. 用硬件卡克隆Linux集群

    650) this.width=650;" onclick="window.open("http://blog.51cto.com/viewpic.php?refimg= ...

  5. golang panic and recover

    panic 是一个内置函数,当一个函数 F 调用 panic,F 的执行就会停止,F 中 deferred 函数调用会被执行,然后 F 返回控制到它的调用者.这个过程会沿着调用栈执行下去,直到当前 g ...

  6. SPOJ 3899. Finding Fractions 连分数

    连分数乱搞,我反正是一眼没看出结果 某巨巨把这题讲解的比较详细 : http://blog.csdn.net/gogdizzy/article/details/8727386 令k = [a/b] 然 ...

  7. Shiro学习总结(4)——Shrio登陆验证实例详细解读

    最终效果如下: 工程整体的目录如下: Java代码如下: 配置文件如下: 页面资源如下: 好了,下面来简单说下过程吧! 准备工作: 先建表: [sql] view plain copy drop ta ...

  8. 程序猿必须知道FTP命令

                                             程序猿必须知道FTP命令 文件传输软件的使用格式为:FTP<FTP地址>.若连 接成功.系统将提示用户输入 ...

  9. JS截取字符串 charAt(),slice(),substring(),substr()

    1. charAt(i)输出指定下标的字母,长度为1,适用于把字符串切割成单个字符串. 2. slice() 和 substring() 都支持1-2个参数,第一个参数是开始位置,第二个参数是结束位置 ...

  10. Centos7安装.Net Core 2.2环境以及部署.Net Core MVC程序(Apache+Jexus环境)

    原文:Centos7安装.Net Core 2.2环境以及部署.Net Core MVC程序(Apache+Jexus环境) 1.双11抢购***VPS.配置如下: CPU:2 核 内存:2048 M ...