http://acm.hdu.edu.cn/showproblem.php?pid=2577

大小写打字,注意shift的使用,注意初始化

View Code
#include <iostream>
using namespace std ;
int dp[101][3] ;
int main()
{
    int t ;
    scanf("%d",&t) ;
    while(t--)
    {
        char s[101] ;
        scanf("%s",s+1) ;
        int len=strlen(s+1) ;
        memset(dp,0,sizeof(dp)) ;
        dp[0][1]=1 ;
        for(int i=1;i<=len;i++)
        {
            if(s[i]>='a' && s[i]<='z')
            {
                dp[i][0]=min(dp[i-1][0]+1,dp[i-1][1]+2) ;
                dp[i][1]=min(dp[i-1][0]+2,dp[i-1][1]+2) ;
            }
            else
            {
                dp[i][0]=min(dp[i-1][0]+2,dp[i-1][1]+2) ;
                dp[i][1]=min(dp[i-1][0]+2,dp[i-1][1]+1) ;
            }
        }
        int ans=min(dp[len][0],dp[len][1]+1) ;
        printf("%d\n",ans) ;
    }
    return 0 ;
}