题意:

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

思路:

  DP,根据每个字符打完后cap键盘是开着的还是关着的,最后dp[最后一个字符][关着的]为答案。规模降低到1个字符,每次考虑增加一个字符,打这个字符有两种选择,从上一个字符打完后的cap键关/开的两种状态来按下此字符,按完此字符后考虑使cap键开着或者关掉。

dp[当前字符][关着的]= 可从两种途径而来(取最小即可):(1)dp[上一个字符][关着的]  (2)dp[上一个字符][开着的]

dp[当前字符][开着的]= 同上。

 1 #include <bits/stdc++.h>
 2 #include <iostream>
 3 #include <cstdio>
 4 using namespace std;
 5 const int N=105;
 6 char str[N];
 7 int dp1[N], dp2[N];
 8
 9 int cal(int len)
10 {
11
12     dp2[0]=1;    //亮
13     for(int i=1; i<=len; i++)
14     {
15         if( str[i]<='Z' )     //大写
16         {
17             dp1[i]=min(dp1[i-1]+2, dp2[i-1]+2);
18             dp2[i]=min(dp1[i-1]+2, dp2[i-1]+1);
19         }
20         else    //小写
21         {
22
23             dp1[i]=min(dp1[i-1]+1, dp2[i-1]+2);
24             dp2[i]=min(dp1[i-1]+2, dp2[i-1]+2);
25         }
26     }
27     return min(dp1[len],dp2[len]+1);
28 }
29
30
31
32 int main()
33 {
34     //freopen("input.txt", "r", stdin);
35     int t;
36     cin>>t;
37     while(t--)
38     {
39         memset(dp1,0,sizeof(dp1));
40         memset(dp2,0,sizeof(dp2));
41         scanf("%s",str+1);
42         cout<<cal(strlen(str+1))<<endl;
43     }
44     return 0;
45 }

AC代码

转载于:https://www.cnblogs.com/xcw0754/p/4550454.html

HDU 2577 How to Type (DP,经典)相关推荐

  1. HDU 2577 How to Type

    毕竟水题, 可还是没能自己做出来. 不过有进步的是看了别人的解题思路便自己用代码实现了. 毕竟水题. 对状态转移方程的寻找还是没有什么思路,但有小小的体会: 所谓状态就是你开的dp数组能够记录从最开始 ...

  2. HDU 1231.最大连续子序列-dp+位置标记

    最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  3. 动态规划27k字超详细保姆级入门讲解——附DP经典线性、区间、二维图、四维8个模型题解

    动态规划27k字超详细保姆级入门讲解 写在前面: 这篇文章是目前为止我写过最长也是最久的文章,前面关于DP的讲解我查阅了大量的博客资料,学习其他博主对DP的理解,也翻阅了很多经典的纸质书籍,同时做了近 ...

  4. HDU 2196 Computer 树形DP经典题

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...

  5. HDU 2577(DP)

    题意:要求一个字符串输入,按键盘的最少次数.有Caps Lock和Shift两种转换大小写输入的方式 思路:用dpa与dpb数组分别记录Caps Lock的开关状态,dpa表示不开,dpb表示开 代码 ...

  6. HDU 6156 Palindrome Function 数位DP

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6156 题目描述: 求L~R所有的数的l~r进制的f(x), f(x) = 当前进制 如果回文串, f ...

  7. HDU 4652 Dice:期望dp(成环)【错位相减】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4652 题意: 给你一个有m个面的骰子. 两种询问: (1)"0 m n": &qu ...

  8. HDU 5115 Dire Wolf 区间dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...

  9. HDU 6143 Killer Names (组合数学+DP)

    Description 字母表的长度为\(m\),用表中的字母构造长度为\(2n\)的字符串,要求同一种字母能同时出现在前\(n\)个字符中和后\(n\)个字符中.输出方案数,结果模\(10^9+7\ ...

  10. HDU 5693 D Game 区间dp

    D Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5693 Description 众所周知,度度熊喜欢的字符只有两个:B 和D. 今天,它 ...

最新文章

  1. The HipHop Virtual Machine
  2. Font from origin 'http://apps.bdimg.com' has been blocked
  3. 编写python程序_如何进行Python程序的编写
  4. android 串口一直打开_实例 | 使用Python串口实时显示数据并绘图
  5. Java基础13:反射与注解详解
  6. hdfs 数据迁移_对象存储BOS发布全新工具,加速自建HDFS到云端的访问速度
  7. java dump 工具_Java内存Dump文件查看和分析工具介绍
  8. ch2 gpio应用:Buzzer封装
  9. SpringMVC和Structs2
  10. 北斗导航 | 卫星导航系统中的GNSS信号技术参数/技术参数/规格
  11. 小米手机刷机为Linux,小米5 刷机LineageOS 14.1的详细教程
  12. AH8652,AH8100,非隔离5V,供电替代阻容降压方案
  13. Fluent 湍流非预混燃烧模拟
  14. Single Tree Segmentation and Diameter at Breast Height Estimation With Mobile LiDAR
  15. juniper防火墙常用配置
  16. DOSBox编译汇编程序(debug、MASM)
  17. mysql数据库 菜鸟_数据库-MySQL入门
  18. 深入了解宽带路由器共享上网原理
  19. AndroidWear官方文档总结05 - 手持设备与穿戴设备的通知同步
  20. 解决Windows10下安装Ubuntu16.04双系统后开机没有Ubuntu引导

热门文章

  1. pve 虚拟环境 vi/vim不能右键粘贴设置方法
  2. Spring 注解 @Controller,@Service,@Repository,@Component,重定向 与 服务端跳转
  3. Linux 网络命令 ip、ifconfig
  4. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-5.HttpClient4.x工具获取使用...
  5. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_7_Lambda表达式有参数有返回值的练习...
  6. 130242014066-王伟华-实验一
  7. 向java全台推送数据等
  8. GMap.Net开发之自定义Marker
  9. BlackBerry 9520上结合139邮箱实现Gmail邮件的短信通知
  10. 背景建模与前景检测之二(Background Generation And Foreground Detection Phase 2)