2011轻工校赛 E 懒人

http://acm.zzuli.edu.cn/showproblem?problem_id=1481

 

当时我没想出来好办法,直接拿搜索过了,比完后听说可以用DP,btw在轻工oj上用DP过了,今天上午上软工课,突然想起来了,用DP想了想,其实就两种状态,cap按下和不按,然后想了想,刚写了写,居然过了~~(*^__^*) 嘻嘻……

 

每一个字母与前一个字母的状态有关系,看代码很容易就看懂啦~~

 

#include <queue> #include <stack> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <limits.h> #include <string.h> #include <algorithm> using namespace std; int main() { char str[105]; int dp[2][105];// dp[0] 小写锁定 dp[1] 大写锁定 while( ~scanf("%s",str) ) { dp[0][0] = 0; dp[1][0] = 1; int len = strlen(str); for(int i=0; i<len; i++) if( islower(str[i]) ) { dp[0][i+1] = min(dp[0][i]+1,dp[1][i]+2); dp[1][i+1] = min(dp[0][i]+2,dp[1][i]+2); } else { dp[0][i+1] = min(dp[0][i]+2,dp[1][i]+2); dp[1][i+1] = min(dp[0][i]+2,dp[1][i]+1); } printf("%d/n",min(dp[0][len],dp[1][len])); } return 0; }  

你可能感兴趣的:(2011轻工校赛 E 懒人)