HDU 2577 How to Type【DP】

题意:给出一个字符串,有大写有小写,问最少的按键次数。然后打字的这个人有一个习惯,打完所有的字之后,指示灯要关闭。

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
",ans);        
38     }
39 }
View Code
原文地址:https://www.cnblogs.com/wuyuewoniu/p/4297350.html