题意:cathy 打字,有大写字母也有小写字母,她想尽可能少的敲键盘,可以按大写锁定键,可以按Shift键来进行敲字母输出最少按键次数,注意,最后大写锁定键灯必须是灭的;我们可以用两个数组表示大写锁定键的灯的状态,然后递推得到最小结果
解题报告:见代码注释
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
char ss[110];
int dpa[110], dpA[110];
int main(){
int T;
scanf("%d", &T );
while( T-- ){
memset(dpa,0,sizeof(dpa));
memset(dpA,0,sizeof(dpA));
scanf("%s", ss+1 );
int len=strlen(ss+1);
dpa[0]=0;
dpA[0]=1;
for ( int i=1; i<=len; i++ ){
char c=ss[i];
if( 'a'<=c && c<='z' ){
dpa[i]=min( dpa[i-1]+1, dpA[i-1]+2 );
dpA[i]=min( dpa[i-1]+2, dpA[i-1]+2 );
}
if( 'A'<=c && c<='Z' ){
dpa[i]=min( dpa[i-1]+2, dpA[i-1]+2 );
dpA[i]=min( dpa[i-1]+2, dpA[i-1]+1 );
}
}
printf("%d\n", min(dpa[len],dpA[len]+1) );
}
return 0;
}