HDU 2577 How to Type (线性dp)
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
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
of the string is at most 100.
Output
Sample Input
3
Pirates
HDUacm
HDUACM
Sample Output
8
8
8HintThe 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
Source
题目链接:
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)的更多相关文章
- 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】
题意:给出一个字符串,有大写有小写,问最少的按键次数.然后打字的这个人有一个习惯,打完所有的字之后,指示灯要关闭. dp[i][j]表示打到第i个字母,j有0,1两个值表示指示灯开或者关的状态 然后就 ...
- HDU 2577 How to Type DP也可以模拟
http://acm.hdu.edu.cn/showproblem.php?pid=2577 大意: 大家都打过字吧,现在有个有趣的问题:给你一串字符串,有大写有小写,要求你按键次数最少来输出它,输出 ...
- 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,经典)
题意: 打字游戏,求所按的最少次数.给出一个串,其中有大小写,大写需要按下cap键切换到大写,或者在小写状态下按shift+键,这样算两次,打小写时则相反.注意:在打完所有字后,如果cap键是开着的, ...
- HDU 2577 分情况多维DP
How to Type Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 2709 Sumsets 经典简单线性dp
Sumsets Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 3455 Leap Frog(线性DP)
Problem Description Jack and Jill play a game called "Leap Frog" in which they alternate t ...
随机推荐
- Scrapy框架使用代理
使用代理抓取https://www.baidu.com/s?wd=ip # -*- coding: utf-8 -*- ''' 一.在settings.py中开启中间件 DOWNLOADER_MIDD ...
- ios程序启动过程和UIWidnow介绍
一.iOS程序的完整启动过程(有storyboard) 1.先执行main函数,main内部会调用UIApplicationMain函数 2.UIApplicationMain函数里面做了什么事情: ...
- spring在web.xml中的配置
在实际项目中spring的配置文件applicationcontext.xml是通过spring提供的加载机制,自动加载的容器中去,在web项目中,配置文件加载到web容器中进行解析,目前,sprin ...
- visualvm监控tomcat
https://my.oschina.net/weidedong/blog/787203
- cogs 1396. wwww
1396. wwww ☆ 输入文件:wwww.in 输出文件:wwww.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 对于一个递归函数w(a,b,c) 如果 ...
- 常用Linux命令 mount df dd
mount -t tmpfs tmpfs ~/build -o size=1G -t 对应的是类型 -o 对应的是选项 tmpfs是Linux/Unix系统上的一种基于内存的文件系统.tmpfs可以使 ...
- 安卓MP3播放器开发实例(3)之进度条和歌词更新的实现
上一次谈了音乐播放的实现,这次说下最复杂的进度条和歌词更新.因为须要在播放的Activity和播放的Service间进行交互,所以就涉及了Activity对Service的绑定以及绑定后数据的传输,这 ...
- jQuery源码05 (3653 , 3797) queue() : 队列方法 : 执行顺序的管理
//对外接口 jQuery.extend({ queue: function( elem, type, data ) {//入队.元素.队列名字.存进去的函数 //jQuery.queue( this ...
- 怎么成为合格的WEB前端开发工程师
web前端开发工程师目前来讲是一个热门职位,但是要成为一个合格的web前端开发工程师,需要掌握的知识可不少,零度就简单的为大家讲讲. 大致的来讲,web前端开发工程师需要掌握的知识有:HTML.CSS ...
- Rabin-Karp 算法
Rabin-Karp字符串查找算法 http://blog.chinaunix.net/uid-26548237-id-3968132.html