hdu 2577(How to Type)

hdu 2577(How to Type)
 1  // 方法很好,利用Caps键是开或关的状态,分别dp两个数组a与b
 2  #include <iostream>
 3 #include < string.h>
 4  using  namespace std;
 5 
 6  int minNum( int a, int b){
 7      return a<b?a:b;
 8 }
 9  int main(){
10     freopen("in.txt","r",stdin);
11      int i,j,cas;
12      char name[110];
13      int a[110],b[110]; // Caps关 与 开
14      cin>>cas;
15      while (cas--){
16         scanf("%s",name);
17         memset(a,0, sizeof(a));
18         memset(b,0, sizeof(b));
19          int len=strlen(name);
20         b[0]=1;
21          for(i=1,j=0;i<=len;i++,j++){
22              if(name[j]>='a'&&name[j]<='z'){ // 小写字母时
23                  a[i]=minNum(a[i-1]+1,b[i-1]+2);
24                 b[i]=minNum(a[i-1]+2,b[i-1]+2);
25             }
26              else{ // 大写字母时
27                  a[i]=minNum(a[i-1]+2,b[i-1]+2); // 写完第i个字母 Caps键关状态
28                  b[i]=minNum(a[i-1]+2,b[i-1]+1); // 写完第i个字母 Caps键开状态
29              }
30         }
31         b[len]++;
32         printf("%d\n",a[len]<b[len]?a[len]:b[len]);
33     }
34      return 0;
35 }
36 

你可能感兴趣的:(hdu 2577(How to Type))