为了账号安全,请及时绑定邮箱和手机立即绑定

动态规划——How to Type(hdu2577)

标签:
算法

题目链接:

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

题目描述:

要求一个字符串输入,求按键盘的最少次数。有Caps Lock和Shift两种转换大小写输入的方式

解题思路:

保存大写和小写两种状态,和上篇雇佣员工逻辑一样,当前字符虽然是大写,不过也可能利用小写+shift实现。

假设我们当前字符i需要大写:对于i输入完后,有两种状态,一种是大写,一种是小写。

输入完大写字符i后继续保持大写的状态可以由①原输入为大写,写一个字符即可,b[i][1]+1 ②原输入为小写,按shift+字符,b[i][0]+2

输入完大写字符i后继续保持大小的状态可以由①原输入为大写,切换后写一个字符即可,b[i][1]+2 ②原输入为小写,写一个字符即可,b[i][0]+1


#include<string.h>#include<stdio.h>int min(int a,int b){return a<b?a:b;}int main(){int b[101][2];char a[10010];int n,i,l;scanf("%d",&n);getchar();while(n--){gets(a);b[0][0]=0;b[0][1]=1;for(i=0;a[i]!='\0';i++){if(a[i]>='A'&&a[i]<='Z')    //如果需求大写 {b[i+1][1]=min(b[i][0]+2,b[i][1]+1);//写完是大写的状态 b[i+1][0]=min(b[i][0]+2,b[i][1]+2);//写完是小写的状态 }else                        //如果需求小写 {b[i+1][1]=min(b[i][0]+2,b[i][1]+2);b[i+1][0]=min(b[i][0]+1,b[i][1]+2);}}l=min(b[i][1]+1,b[i][0]);printf("%d\n",l);}return 0;}


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消