标签:hdu2577
最近广州很热啊,住在楼顶7楼的我真心热,听闻不超过八层不建电梯,所以我们就悲剧了,每天都爬七楼,不过早已习惯了,但是一身汗有木有!
今天早上做的还是dp,题目的意思就是输出一串含大小写字符串,最小键入次数,平时我只用caps来切换大小写简直无法直视这题目……
后来shift切换大小写这点让我小小郁闷
代码注释打得很清晰,话说我比赛时候都会打注释的……因为怕乱。上课了!
/***********************************************************
> OS : Linux 3.2.0-60-generic #91-Ubuntu
> Author : yaolong
> Mail : dengyaolong@yeah.net
> Time : 2014年05月27日 星期二 07:09:19
**********************************************************/
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
int a[105],b[105];//a为关灯,b为开灯
int main(){
// freopen("in.txt","r",stdin);
string str;
int T;
cin>>T ;
while(T--){
cin>>str;
int len=str.length();
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
if(str[0]<'a'){//大写
a[0]=2;//保持小写,就直接shift
b[0]=2;//caps+直接输入
}else{//小写
a[0]=1;//保持小写,直接输入
b[0]=2;//先输入,再 caps
}
for(int i=1;i<len;i++){
if(str[i]<'a'){//大写
a[i]=min(a[i-1]+2,b[i-1]+2);//如果是关了又保持关的,当然是按shift,即+2,开了的直接打,打完关灯
b[i]=min(a[i-1]+2,b[i-1]+1);//关了的开了打
}else{//小写
a[i]=min(a[i-1]+1,b[i-1]+2);//没开直接打;开了按 cap再输入
b[i]=min(a[i-1]+2,b[i-1]+2);//没开按输入后再cap,开了的,直接shift.
}
}
cout<<min(a[len-1],b[len-1]+1)<<endl;
}
return 0;
}
标签:hdu2577
原文地址:http://blog.csdn.net/dengyaolongacmblog/article/details/27166921