毕竟水题,

可还是没能自己做出来。

不过有进步的是看了别人的解题思路便自己用代码实现了。

毕竟水题。

对状态转移方程的寻找还是没有什么思路,但有小小的体会:

所谓状态就是你开的dp数组能够记录从最开始的1个子问题最优解到最后整个状态的最优解。

首先你得dp数组得能记录每时每刻的状态,不能有信息丢失。

从打印第一个字符开始到最后一个字符,已经打印的字符的个数这是一个状态。

Caps Lock开没开这也是一个状态,所以这个题里面dp是两个维度。

而且状态转移方程的每次转换都要保证是从最优解转到最优解。

回到这个题上面来:

打字分这四种情况:

1、要打一个大写字母

①、打完这个字符大写锁定键是关着的

如果现在的状态时关着的,那么shift + key

如果现在的状态时开着的,那么CapsLock + key

②、打完这个字符大写锁定键是开着的

如果现在的状态时关着的,那么CapsLock + key

如果现在的状态时开着的,那么key

2、要打一个小写字母

①、打完这个字符大写锁定键是关着的

如果现在的状态时关着的,那么key

如果现在的状态时开着的,那么CapsLock + key

②、打完这个字符大写锁定键是开着的

如果现在的状态时关着的,那么key + CapsLock

如果现在的状态时开着的,那么shift + key

根据这个便可很容易的写出状态转移方程,具体见代码。

 1 //#define LOCAL
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <algorithm>
 6 using namespace std;
 7
 8 int dp[110][2];
 9
10 int main(void)
11 {
12     #ifdef LOCAL
13         freopen("2577in.txt", "r", stdin);
14     #endif
15
16     int n;
17     char str[110];
18     scanf("%d", &n);
19     getchar();
20     while(n--)
21     {
22         memset(dp, 0, sizeof(dp));
23         gets(str + 1);
24         int len = strlen(str + 1);
25         dp[0][0] = 0;
26         dp[0][1] = 1;
27         int i;
28         for(i = 1; i <= len; ++i)
29         {
30             if(str[i] >= 'A' && str[i] <= 'Z')
31             {
32                 dp[i][0] = min(dp[i - 1][0] + 2, dp[i - 1][1] + 2);
33                 dp[i][1] = min(dp[i - 1][0] + 2, dp[i - 1][1] + 1);
34             }
35             else
36             {
37                 dp[i][0] = min(dp[i - 1][0] + 1, dp[i - 1][1] + 2);
38                 dp[i][1] = min(dp[i - 1][0] + 2, dp[i - 1][1] + 2);
39             }
40         }
41
42         int ans = min(dp[len][0], dp[len][1] + 1);
43         printf("%d\n", ans);
44     }
45     return 0;
46 }

代码君

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/3826954.html

HDU 2577 How to Type相关推荐

  1. 【HDOJ】2577 How to Type

    DP. 1 /* 2577 */ 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 6 ...

  2. HDU 2577(DP)

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

  3. html字段值换行代码怎么写,HTML段落,换行,字符实体

    HTML段落,换行,字符实体 html段落 标签定义一个文本段落,一个段落含有默认的上下间距,段落之间会用这种默认间距隔开,代码如下: 段落 HTML是 HyperText Mark-up Langu ...

  4. c语言字符串子串问题,C语言计算字符串子串出现的次数

    #include #include int substring(char *str,char *str1);//函数原型 int main(void) { char str[64]={0}; char ...

  5. 有趣的动态规划题目(一)

    文章目录 [HDOJ 2084.数塔] [HDOJ 1176.免费馅饼] [HDOJ 1864.最大报销额] [HDOJ 1003.Max Sum] [HDOJ 1506.Largest Rectan ...

  6. HDU OJ 动态规划46题解析

    Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955  背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢 ...

  7. HDU中一些DP的题目分类

    DP是难点,供自已以后系统学习. 1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955      背包;第一次做的时候把概率当做 ...

  8. hdu 动态规划题集

    原文链接:http://blog.sina.com.cn/s/blog_6cf509db0100sptt.html点击打开链接 1.Robberies 连接 :http://acm.hdu.edu.c ...

  9. hdu 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】(转)

    HDU 动态规划(46道题目)倾情奉献~ [只提供思路与状态转移方程] Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955      背包 ...

最新文章

  1. Java 虚拟机总结给面试的你(下)
  2. ../include/my_global.h:1107: 错误:对 C++ 内建类型‘bool’的重声明
  3. 深入浅出 RecyclerView
  4. 图像处理之log---log算子
  5. Spring Boot属性配置文件详解
  6. 验证Ross《随机过程》(第二版)1.9C
  7. 考研计算机专业复试,计算机专业考研复试准备
  8. C# 虚方法(virtual)覆盖(override) - 隐藏(new) - 重载
  9. java多字段排序,java8 stream多字段排序的实现
  10. 一起来学SpringBoot | 第四篇:整合Thymeleaf模板
  11. “APP杀手”?微信小程序瞬间原形毕露
  12. css遮罩层从下往上_CSS:图片自带3px下边距的bug修复
  13. MySQL8新增管理端口
  14. 你知道怎么解决DB读写分离,导致数据不一致问题吗?
  15. PG Vs MySQL ,到底谁更强?
  16. Mysql 驱动包mysql-connector-java-8.0.25.jar下载
  17. 帝国cms !--list.var1--,!--list.var2--的终极用法
  18. IJCAI 2022|边界引导的伪装目标检测模型BGNet
  19. 第四十章 Caché 变量大全 $ZREFERENCE 变量
  20. 学生选课管理系统 jsp + servlet + mysql (2021)

热门文章

  1. java可以看懂php代码吗_可以自己给自己理发吗?看懂这六点细节就能给自己理发了...
  2. base64编码 springboot_解决idea中Springboot找不到BASE64Encoder或Decoder的jar包
  3. makefile 打印变量_通过实例学Makefile
  4. python文件移动到文件夹_python – 将文件夹中的文件移动到顶级目录
  5. js 将多个对象合并成一个对象 assign方法
  6. 高效率的全组合算法(Java版实现)
  7. python语言支不支持常量_python实现不可修改的常量
  8. centos mysql 同步时间_centos:mysql主从同步配置(2018)
  9. linux e1000e 网卡驱动,在centos7上安装intel e1000e 网卡驱动
  10. 五人合伙最佳股份分配_【干货要点】再谈“类直营”——百果园的店长合伙人...