zoukankan      html  css  js  c++  java
  • hdu 2577 How To Type

    题目传送门

    题目大意:输入 n 个字符串,仅包含大小写字母,问你最少需要多少步打完这个字符串。

    解题思路:运用 dp 的思想,判断大写字母和小写字母。

    #include<bits/stdc++.h>
    using namespace std;
    int T,l,dp[110][2];
    string str;
    int main(void)
    {
        scanf("%d",&T);
        while(T--)
        {
            cin>>str;
            l=str.size();
            memset(dp,0x3f,sizeof(dp));//初始化 dp 数组
            dp[0][0]=0,dp[0][1]=1;//dp[0][0] 代表没有按下 capslock,dp[0][1] 代表按下了 capslock
            for(int i=1;i<=l;i++)
            {
                if(str[i-1]>='A' && str[i-1]<='Z')//如果是大写字母
                {
                    dp[i][1]=min(dp[i-1][0]+2,dp[i-1][1]+1);//当前有两种情况,一种是上一个没按 capslock 加上 2,因为要按下 capslock,另一种是上一个就按下了 capslock 所以就只用加上 1
                    dp[i][0]=min(dp[i-1][1]+2,dp[i-1][0]+2);//同上所述,只不过变成没开 capslock
                }
                else//如果是小写字母
                {
                    dp[i][1]=min(dp[i-1][0]+2,dp[i-1][1]+2);//同上所述,开了 capslock 只不过要变成小写字母
                    dp[i][0]=min(dp[i-1][1]+2,dp[i-1][0]+1);//同上所述,没开 capslock
                }
            }
            printf("%d
    ",min(dp[l][1]+1,dp[l][0]));//取这两种情况中按键盘次数最少的
        }
    }
    
  • 相关阅读:
    HDU 1573: X问题
    HDU 1370: Biorhythms
    Break Number --AtCoder
    Cat Snuke and a Voyage --AtCoder
    Fennec VS. Snuke --AtCoder
    Splitting Pile --AtCoder
    Sharing Cookies --AtCoder
    GLB串
    派(Dispatch)
    你知道那棵杨树底下有什么吗
  • 原文地址:https://www.cnblogs.com/ForeverOIer/p/12111930.html
Copyright © 2011-2022 走看看