这两天快被DP整崩溃啦!!!今天拿到这道题也是无从下手,问了下高手思路才做出来。

思路:

开另个数组on[], off[]。分别表示开Caps Lock灯,和关Caps Lock灯时的最小按键次数

当字符串s[i]为大写时:

  on[i] = min{ on[i-1] + 1, off[i-1] + 2} //开灯时直接输入字母,关灯时按shift+字母;

  off[i] = min{ on[i-1] + 2, off[i-1] + 2} //开灯时先输字母再关灯,关灯时按shift+字母;

当字符串s[i]为小写时:

  on[i] = min{ on[i-1] + 2, off[i-1] + 2} //开灯时按shift+字母, 关灯时按字母再开灯;

  off[i] = min{ on[i-1] + 2, off[i-1] + 1} //开灯时关灯再按键,关灯时直接按键;

My Code:

#include <iostream>#include <cstdio>#include <cstring>

using namespace std;

const int N = 107;

int on[N], off[N];char s[N];

int main(){//freopen("data.in", "r", stdin);

int t, len, i;    scanf("%d", &t);while(t--)    {        scanf("%s", s);

        memset(on, 0, sizeof(on));        memset(off, 0, sizeof(off));

        on[0] = 1; len = strlen(s);

for(i = 1; i <= len; i++)        {if(isupper(s[i-1]))            {                on[i] = min(on[i-1]+1, off[i-1]+2);                off[i] = min(off[i-1]+2, on[i-1]+2);            }else            {                on[i] = min(off[i-1]+2, on[i-1]+2);                off[i] = min(off[i-1]+1, on[i-1]+2);            }        }        printf("%d\n", off[len]);    }return 0;}

转载于:https://www.cnblogs.com/vongang/archive/2011/08/30/2159962.html

HDU_2577 How to Type(DP)相关推荐

  1. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  2. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  3. LeetCode 1220. 统计元音字母序列的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...

  4. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

  5. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  6. LeetCode 1223. 掷骰子模拟(DP)

    1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...

  7. LeetCode 1155. 掷骰子的N种方法(DP)

    1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...

  8. LeetCode 1139. 最大的以 1 为边界的正方形(DP)

    1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量.如果不存在,则返回 0. 示例 1: 输入:grid ...

  9. 程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)

    1. 题目 给定一个方阵,其中每个单元(像素)非黑即白. 设计一个算法,找出 4 条边皆为黑色像素的最大子方阵. 返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和 ...

最新文章

  1. 图像与数据类型的对应,以及如何显示
  2. 金鱼会开车?对,以色列新研究证明金鱼有陆地导航能力,还能看标志认出目的地...
  3. intelliJ idea如何安装、配置
  4. 服务器安装报告linux,linux – 在ubuntu服务器上安装了2TB磁盘,dmesg将其报告为9444732965540666 MB...
  5. Alpha 冲刺 (7/10)
  6. linux之分区的水深(标准分区方式)
  7. redhat 6.6 安装 (LVM)
  8. Oracle 日期加减运算
  9. 【Kafka】Kafka事务是怎么实现的
  10. LARGE_INTEGER类型和QueryPerformanceFrequency()
  11. DirectShow Filter 开发典型例子分析 ——字幕叠加 (FilterTitleOverlay)1
  12. Linux学习(第十七周)
  13. 单片机拟真电路图软件_DIY AT89S52单片机编程器
  14. Dymola-多学科系统仿真工具
  15. msm8937 porting iic device
  16. 为什么世界 500 强企业在逐步淘汰传统绩效考核
  17. 局域网搭建IOS应用在线安装环境
  18. 简要描述CSS 中的定位机制。
  19. java遍历一个类的属性名,java遍历对象属性
  20. ios 弹幕过滤敏感词方案对比和性能测试

热门文章

  1. ZeroMQ接口函数之 :zmq - 0MQ 轻量级消息传输内核
  2. 调度策略的测试方法及其自动化
  3. 一步一步学习OC2007(三)--定制菜单命令
  4. android NDk编程
  5. Android 音频录制和播放问题
  6. android杀掉进程顺序
  7. WebKit 内核源码分析 (五)
  8. v8学习笔记(三) 运行时环境
  9. C/C++语言宏定义##连接符和符#的使用
  10. substring()函数用法