随笔-65  评论-6  文章-0  trackbacks-0
 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 
posted on 2012-07-07 10:19 Leo.W 阅读(93) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理