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

大意:

大家都打过字吧,现在有个有趣的问题:给你一串字符串,有大写有小写,要求你按键次数最少来输出它,输出按键次数。

大写字母可以通过caps lock 也可以用shift得到,小写也是。

但是起始状态和最后caps lock都是不锁定的。

求最少的按键次数。

思路:

不用DP的方法:

当有连续的大写或者小写用caps lock 键,否则用shift。

#include<cstdio>
#include<cstring>
const int MAXN=110;
int main()
{
int T;
scanf("%d",&T); while(T--)
{
char a[MAXN];
scanf("%s",a);
int len=strlen(a);
bool capslock=false;
int cnt=0;
for(int i=0;i<len;i++)
{
if(a[i] >= 'A' && a[i] <= 'Z')
{
if(capslock==false)
cnt++; //shift or capslock if(a[i+1]>= 'A' && a[i+1] <= 'Z')
capslock=true;
cnt++;
}
else
{
if(capslock==true)
cnt++; //shift or capslock
if(a[i+1]>= 'a' && a[i+1] <= 'z' ||a[i+1]=='\0') //a[i+1]=='\0'必须加,这也就是模拟wa原因
capslock=false;
cnt++;
}
}
if(capslock)
cnt++;
printf("%d\n",cnt); }
return 0;
}

DP的方法

设lock[i]为敲完第i个之后为锁定状态,而notlock[i]为敲完第i个之后为没有锁定状态

则分大小写讨论:

a[i]若为大写:

lock[i]=min(lock[i-1]+1,notlock[i-1]+2);

notlock[i]=min(lock[i-1]+2,notlock[i-1]+2);

否则:

lock[i]=min(lock[i-1]+2,notlock[i-1]+2);

notlock[i]=min(lock[i-1]+2,notlock[i-1]+1);

至于怎么来的,你敲一下键盘你就懂了

还有就是最后要变成没有锁定状态。。

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
const int MAXN=110;
int main()
{
int T;
scanf("%d",&T); while(T--)
{
char a[MAXN];
int lock[MAXN]={0};
int notlock[MAXN]={0};
scanf("%s",a);
int len=strlen(a);
if(isupper(a[0]))
{
lock[0]=2;
notlock[0]=2;
}
else
{
lock[0]=2;
notlock[0]=1;
} for(int i=1;i<len;i++)
{
if(isupper(a[i]))
{
lock[i]=min(lock[i-1]+1,notlock[i-1]+2);
notlock[i]=min(lock[i-1]+2,notlock[i-1]+2);
}
else //小写
{
lock[i]=min(lock[i-1]+2,notlock[i-1]+2);
notlock[i]=min(lock[i-1]+2,notlock[i-1]+1);
}
} printf("%d\n",min(notlock[len-1],lock[len-1]+1)); //最后要变成没有锁定的 }
return 0;
}

HDU 2577 How to Type DP也可以模拟的更多相关文章

  1. hdu 2577 How to Type(dp)

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

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

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

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

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

  4. HDU 2577 How to Type(dp题)

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

  5. hdu 2577 How to Type(DP)

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

  6. HDU 2577 How to Type【DP】

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

  7. HDU 2577 How to Type (字符串处理)

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

  8. HDU 2577 How to Type (字符串处理)

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

  9. DP问题(1) : hdu 2577

    题目转自hdu 2577,题目传送门 题目大意: 现给你n个区分大小写的字符串,大小写可用Caps Lock和shift切换(学过计算机的都知道) 但是有一点需要注意(shift是切换,若现在是大写锁 ...

随机推荐

  1. Myeclipse学习总结(2)——MyEclipse快捷键大全

    1.ctrl+shift+R 打开资源 此组快捷键可以打开工程中任意一个文件,而本人只需按文件名或者mask名的字母顺序输入就会出现对应的文件或者在内容中某个关键字再按快捷键也可以的,例如:Custo ...

  2. understand软件使用教程(转)

    源代码阅读工具(Scientific Toolworks Understand)的特色 1.支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, ...

  3. GCC中-fpic解惑(转载)

    参考: 1.<3.18 Options for Code Generation Conventions>2.<Options for Linking>3.<GCC -fP ...

  4. 计蒜客 429(腾讯手机地图-pi的精确值)

    腾讯手机地图的定位功能用到了用户手机的多种信号.这当中有的信号的作用范围近.有的信号作用的范围则远一些.有的信号相对于用户在不同的方位强度是不同的.有的则是在不论什么一个方向上信号强度都一致的. 已知 ...

  5. OpenCASCADE Job - 上海地目

  6. c# 查询sql 返回多个參数

    1.依据须要查询mysql 语句,返回三个须要的參数,不是数据集 2.编写函数例如以下: public static void GetParas(string 条件1, out string 返回值1 ...

  7. [分享]ip地址爬取过滤的shell

    http://www.hbbzy.me/分享ip地址爬取过滤的shell #!/bin/base #ip zhi地址匹配 #获取最新的ip地址 #author:haifeng #wget ftp:// ...

  8. Vue router的query对象里的值的问题

    在使用 $router.push() 时,如果使用了query,则可以在跳转后从query中获取到对应的参数.如果传的是字符串自然没问题,但是如果传的其他类型的数据,在跳转之后是正常的,而跳转之后再刷 ...

  9. Spring MVC modelandview

    一开始${Name} 不能显示 原来是: import org.springframework.web.portlet.ModelAndView; --错误的引入 import org.springf ...

  10. CTF加密题型解析:RSA算法的CTF解法之一

    RSA介绍 根据加密原理,可以将大部分的加密算法分为两大类:对称加密算法和非对称加密算法.对称加密算法的加密和解密采用的是同一套算法规则.而非对称加密算法加密时用的是公钥(公开给所有人),解密时用的是 ...