• CodeForces 180C Letter


    题意:给你一个序列,问你最小变几次使字符串变成前面为大写,后面为小写的字符串。

    思路:这是一个简单的选择字符串的每一位变还是不变(我个人还是认为之中dp有点偏向于暴力,主要在于dp方程的思考,对于dp的状态也很容易定义,就是长度和是否选择决定的dp的状态)

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+7;
    char a[maxn];
    int dp[maxn][2];
    
    int main()
    {
        while(~scanf("%s",a)){
            int len=strlen(a);
            memset(dp,0,sizeof(dp));
            if(a[0]>='A'&&a[0]<='Z')dp[0][1]=1;
            else dp[0][0]=1;
            for(int i=1;i<len;i++){
                if(a[i]>='A'&&a[i]<='Z'){
                    dp[i][1]=min(dp[i-1][0],dp[i-1][1])+1;
                    dp[i][0]=dp[i-1][0];
                }
                else{
                    dp[i][0]=dp[i-1][0]+1;
                    dp[i][1]=min(dp[i-1][1],dp[i-1][0]);
                }
            }
            printf("%d
    ",min(dp[len-1][0],dp[len-1][1]));
        }
        return 0;
    }
  • 相关阅读:
    电源
    SM2947
    网表
    cadence设计思路
    青山依旧在,几度夕阳红
    乐观锁与悲观锁
    笔记
    强弱软虚引用
    缓存相关
    dubbo
  • 原文地址:https://www.cnblogs.com/lalalatianlalu/p/8450420.html
Copyright © 2020-2023  润新知