题意:给出一个字符串,有大写有小写,问最少的按键次数。然后打字的这个人有一个习惯,打完所有的字之后,指示灯要关闭。
dp[i][j]表示打到第i个字母,j有0,1两个值表示指示灯开或者关的状态
然后就可以写出状态转移方程了,因为最后需要灯是灭的,所以最后在找最小值的时候,dp[len][1]需要加1
又一次看的题解===go--go
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 7 int dp[200][2]; 8 char s[200]; 9 10 int main() 11 { 12 int ncase,i,len,ans; 13 scanf("%d",&ncase); 14 getchar(); 15 while(ncase--) 16 { 17 memset(dp,0,sizeof(dp)); 18 ans=0; 19 gets(s+1); 20 len=strlen(s+1); 21 dp[0][0]=0; 22 dp[0][1]=1; 23 for(i=1;i<=len;i++) 24 { 25 if(s[i]>=‘A‘&&s[i]<=‘Z‘) 26 { 27 dp[i][1]=min(dp[i-1][1]+1,dp[i-1][0]+2); 28 dp[i][0]=min(dp[i-1][1]+2,dp[i-1][0]+2); 29 } 30 else 31 { 32 dp[i][1]=min(dp[i-1][1]+2,dp[i-1][0]+2); 33 dp[i][0]=min(dp[i-1][1]+2,dp[i-1][0]+1); 34 } 35 } 36 ans=min(dp[len][0],dp[len][1]+1); 37 printf("%d\n",ans); 38 } 39 }
时间: 2024-10-13 21:29:11