`

hdu 2577 How to Type(很爽很好玩的DP)

阅读更多

How to Type

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 842    Accepted Submission(s): 364

Problem Description
Pirates have finished developing the typing software. He called Cathy to test his typing software. She is good at thinking. After testing for several days, she finds that if she types a string by some ways, she will type the key at least. But she has a bad habit that if the caps lock is on, she must turn off it, after she finishes typing. Now she wants to know the smallest times of typing the key to finish typing a string.

 

Input
The first line is an integer t (t<=100), which is the number of test case in the input file. For each test case, there is only one string which consists of lowercase letter and upper case letter. The length of the string is at most 100.
Output
For each test case, you must output the smallest times of typing the key to finish typing this string.

 

Sample Input
3 Pirates HDUacm HDUACM

 

Sample Output
8 8 8
Hint
The string “Pirates”, can type this way, Shift, p, i, r, a, t, e, s, the answer is 8. The string “HDUacm”, can type this way, Caps lock, h, d, u, Caps lock, a, c, m, the answer is 8 The string "HDUACM", can type this way Caps lock h, d, u, a, c, m, Caps lock, the answer is 8
 
            题目大意:给你一个字符串,问要至少按多少次键盘才能打出这些字母,有大写和小写,可以按caps lock,也可以按shift。注意!!最后打完后,caps lock一定要是关灯的(小写)。
         一道很好的DP题目!非常好!用on[]记住开灯的状态,用off[]记住关灯的状态,然后根据大小写字母来写状态转移方程!下面代码有详细注释。
代码:
#include <iostream>
#include <stdio.h>
#include <memory.h>
using namespace std;

char ch[105];
int on[105];    //打开大写
int off[105];   //关闭大写

int main()
{
    int i, t, len;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%s", ch);
        len = strlen(ch);
        off[0] = 0; //刚开始的没开灯
        on[0] = 1;  //开灯的要+1
        for(i = 0; i < len; i++)
        {
            if(ch[i] >= 'a' && ch[i] <= 'z')    //小写字母
            {
                //开:(开~~shift+type, 关~~type+开灯)
                on[i+1] = min(on[i] + 2, off[i] + 2);
                //关:(开~~lock+type, 关~~type)
                off[i+1] = min(on[i] + 2, off[i] + 1);
            }
            else    //大写字母
            {
                //开:(开~~type, 关~~开灯+type)
                on[i+1] = min(on[i] + 1, off[i] + 2);
                //关:(开~~lock+type, 关~~shift+type)
                off[i+1] = min(on[i] + 2, off[i] + 2);
            }
        }
        on[len]++;
        printf("%d\n", min(on[len], off[len]));
    }

    return 0;
}
 
0
2
分享到:
评论

相关推荐

    HDU DP动态规划

    【标题】"HDU DP动态规划"涉及到的是在算法领域中的动态规划(Dynamic Programming,简称DP)技术,这是解决复杂问题的一种高效方法,尤其适用于有重叠子问题和最优子结构的问题。动态规划通常用于优化多阶段决策...

    HDU DP 题集

    动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,...

    HDU DP题解

    HDU上DP大集合,里面包括题,题解,代码,对DP入门者很实用,对DP老手也是有很大的提高

    ACM HDU题目分类

    DP(Dynamic Programming,动态规划)是一种非常重要的算法思想,在 ACM HDU 题目分类中,DP 问题占据了很大的比例。例如,1003 DP 经典问题,最大连续子段和;1024 经典 DP,最大 M 子段和;1025 经典 DP,最长递增...

    DP.rar_DP_hdu_动态规划_动态规划 C++

    标题中的“DP.rar”表明这是一个关于动态规划的资料压缩包,而“DP_hdu”暗示了这些题目可能来自杭州电子科技大学(HDU)的在线编程平台。动态规划通常用于解决那些可以通过子问题的最优解来构建原问题最优解的问题...

    hdu.rar_hdu

    "hdu.rar_hdu"这个压缩包文件很可能是某位程序员整理的他在HDU上解决过的题目代码集合。这些代码通常包含了对各种算法的应用,例如排序、搜索、图论、动态规划等,对于学习算法和准备编程竞赛的初学者来说是一份宝贵...

    acmhdu1005

    hdu 1005.比较简单的一道题,有兴趣的可以看看。

    HDU题目java实现

    【标题】"HDU题目java实现"所涉及的知识点主要集中在使用Java编程语言解决杭州电子科技大学(HDU)在线评测系统中的算法问题。HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案...

    HDU_2010.rar_hdu 2010_hdu 20_hdu acm20

    【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...

    hdu1001解题报告

    hdu1001解题报告

    HDU1059的代码

    HDU1059的代码

    hdu 1574 passed sorce

    hdu 1574 passed sorce

    hdu 1257 最低拦截系统 lis

    题目名为“hdu 1257 最低拦截系统”,这里的“最低拦截系统”实际上是描述了一个问题场景,而具体的问题通过描述部分可以得知是要求找出给定数组中的最长递增子序列的长度。这里所谓的“最低拦截系统”可能是为了...

    hdu1250高精度加法

    ### hdu1250高精度加法 #### 背景介绍 在计算机科学与编程竞赛中,处理大整数运算(特别是加法、减法、乘法等)是常见的需求之一。当数字的位数超过了标准数据类型(如`int`、`long`等)所能表示的最大值时,就需要...

    hdu2101解决方案

    hdu2101AC代码

    杭电ACMhdu1163

    【标题】:杭电ACMhdu1163 【描述】:这是一道源自杭州电子科技大学(Hangzhou Dianzi University,简称HDU)的ACM编程竞赛题目,编号为1163。这类问题通常需要参赛者利用计算机编程解决数学、逻辑或算法上的挑战,...

    ACM HDU

    在压缩包文件名列表中提到的"acm",很可能是一个文件夹或文件,它包含了ACM HDU题目解题的相关资料,例如: 1. **题目描述文档**:这些文件可能包含每个题目的详细说明,包括输入输出示例、测试数据和解题要求。 2....

    hdu 5007 Post Robot

    hdu 5007 Post Robot 字符串枚举。 暴力一下就可以了。

    hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj

    【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...

    hdu acm1166线段树

    hdu 1166线段树代码

Global site tag (gtag.js) - Google Analytics