/*
* Author: johnsondu
* Time : 2013-5-1
* problems: HDU 2577 how to type
* url: http://acm.hdu.edu.cn/showproblem.php?pid=2577
* stratege: dynamic programming
*/
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std ;
#define N 105
#define min(x, y) (x < y ? x : y)
char str[N] ;
int dp[2][N] ;
int main()
{
int tcase ;
//freopen ("data.txt", "r", stdin) ;
scanf ("%d", &tcase) ;
while (tcase --)
{
scanf ("%s", str) ;
int len = strlen (str) ;
memset (dp, 0, sizeof (dp)) ;
if (str[0] >= 'a' && str[0] <= 'z') //initialize, 0 stands for caplocks off, 1 up
dp[0][0] = 1, dp[1][0] = 3 ;
else dp[0][0] = 2, dp[1][0] = 2 ;
for (int i = 1; i < len; i ++)
{
if (str[i] >= 'a' && str[i] <= 'z') //DP
{
dp[0][i] = min (dp[1][i-1] + 2, dp[0][i-1] + 1) ;
dp[1][i] = min (dp[0][i-1] + 3, dp[1][i-1] + 2) ;
}
else
{
dp[1][i] = min (dp[1][i-1] + 1, dp[0][i-1] + 2) ;
dp[0][i] = min (dp[1][i-1] + 3, dp[0][i-1] +2) ;
}
}
int ans = min (dp[0][len-1], dp[1][len-1] + 1) ;
printf ("%d\n", ans) ;
}
return 0 ;
}
HDU 2577 how to type
最新推荐文章于 2018-03-05 22:13:55 发布