您的位置:首页 > 其它

2011轻工校赛 E 懒人

2011-05-03 12:30 363 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: