题意:给出一个字符串,有大写有小写,问最少的按键次数。然后打字的这个人有一个习惯,打完所有的字之后,指示灯要关闭。
dp[i][j]表示打到第i个字母,j有0,1两个值表示指示灯开或者关的状态
然后就可以写出状态转移方程了,因为最后需要灯是灭的,所以最后在找最小值的时候,dp[len][1]需要加1
又一次看的题解===go--go
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int dp[][];
char s[]; int main()
{
int ncase,i,len,ans;
scanf("%d",&ncase);
getchar();
while(ncase--)
{
memset(dp,,sizeof(dp));
ans=;
gets(s+);
len=strlen(s+);
dp[][]=;
dp[][]=;
for(i=;i<=len;i++)
{
if(s[i]>='A'&&s[i]<='Z')
{
dp[i][]=min(dp[i-][]+,dp[i-][]+);
dp[i][]=min(dp[i-][]+,dp[i-][]+);
}
else
{
dp[i][]=min(dp[i-][]+,dp[i-][]+);
dp[i][]=min(dp[i-][]+,dp[i-][]+);
}
}
ans=min(dp[len][],dp[len][]+);
printf("%d\n",ans);
}
}