HDU 2577 How to Type【DP】

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

dp[i][j]表示打到第i个字母,j有0,1两个值表示指示灯开或者关的状态

HDU 2577 How to Type【DP】

然后就可以写出状态转移方程了,因为最后需要灯是灭的,所以最后在找最小值的时候,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 }
View Code

 

你可能感兴趣的:(type)