• HDU 2577 How to Type(dp题)


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2577

    解题报告:有一个长度在100以内的字符串,并且这个字符串只有大写和小写字母组成,现在要把这些字符串用键盘输入到电脑中,一开始的时候大写锁定是关闭的,并且要求结束的时候也是关闭的,然后让你求输入这些字符串最少需要按多少次键盘(包括Cap Lock键和Shift键)

    一个典型的dp题,定义一个一维数组就够了,然后dp[i]的含义的输入到第i个字符时需要按键的最少次数。然后递推公式如下:

    dp[i] = min(dp[i],dp[j-1] + judge1(j,i));
    dp[i] = min(dp[i],dp[j-1] + judge2(j,i));

    两种输入方式分别是从第j个字符到第i个字符打开大写锁定来输入,另一种方式是关闭大写锁定来输入第j到i的字符。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<iostream>
     5 #include<cmath>
     6 #include<deque>
     7 #include<map>
     8 #include<queue>
     9 #include<cstdlib>
    10 using namespace std;
    11 const int maxn = 105;
    12 char str[maxn];
    13 int dp[maxn];
    14 int judge1(int x,int y)
    15 {
    16     int sum = 2;
    17     for(int i = x;i <= y;++i)
    18     if(str[i] >= 'A' && str[i] <= 'Z')
    19     sum++;
    20     else if(str[i] >= 'a' && str[i] <= 'z')
    21     sum += 2;
    22     return sum;
    23 }
    24 int judge2(int x,int y)
    25 {
    26     int sum = 0;
    27     for(int i = x;i <= y;++i)
    28     if(str[i] >= 'A' && str[i] <= 'Z')
    29     sum += 2;
    30     else if(str[i] >= 'a' && str[i] <= 'z')
    31     sum++;
    32     return sum;
    33 }
    34 int main()
    35 {
    36     int T;
    37     scanf("%d",&T);
    38     while(T--)
    39     {
    40         scanf("%s",str+1);
    41         int len = strlen(str+1);
    42         memset(dp,0x3f,sizeof(dp));
    43         dp[0] = 0;    //使0号为0,后面要-1,不用做特殊处理 
    44         for(int i = 1;i <= len;++i)
    45         for(int j = 1;j <= i;++j)
    46         {
    47             dp[i] = min(dp[i],dp[j-1] + judge1(j,i));
    48             dp[i] = min(dp[i],dp[j-1] + judge2(j,i));
    49         }
    50         printf("%d
    ",dp[len]);
    51     }
    52     return 0;
    53 }        
    View Code
  • 相关阅读:
    Java 窗口 绘制图形 #1
    支配树
    Tarjan算法
    Baby-step giant-step算法
    初等群论
    第七次java作业
    学习所用的开发环境
    第六次java作业
    第五次java作业
    第四次java作业
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3697739.html
Copyright © 2020-2023  润新知