码迷,mamicode.com
首页 > 其他好文 > 详细

CodeForces 180C Letter

时间:2018-02-16 20:26:02      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:定义   letter   memset   strlen   else   i++   字符   ++   bsp   

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

思路:这是一个简单的选择字符串的每一位变还是不变(我个人还是认为之中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\n",min(dp[len-1][0],dp[len-1][1]));
    }
    return 0;
}

 

CodeForces 180C Letter

标签:定义   letter   memset   strlen   else   i++   字符   ++   bsp   

原文地址:https://www.cnblogs.com/lalalatianlalu/p/8450420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!