哈哈~这题秒掉了,总的来说这些天的DP苦修还是有点成果的。哇哈哈哈。
做题过程大概是这样的,前几天看了下这题,完全不敢切,果断的没思路。今天再一看,在纸上用笔演练了下,发现基本上能推出公式了。呵呵,蛮好玩的么,DP,虽然只是道水题,但是也说明了我在进步啊~ 哈哈哈
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;int min( int a,int b ){ return a<b?a:b; }int main()
{int T;scanf( "%d",&T );while( T-- ){char date[111];scanf( "%s",&date );int f[111][2];memset( f,0,sizeof(f) );f[0][1]=1;if( date[0]>='A' && date[0]<='Z' )f[0][1]+=1,f[0][0]+=2;elsef[0][1]+=2,f[0][0]+=1;for( int i=1;i<=strlen(date);i++ ){int low,high;if( date[i]>='A' && date[i]<='Z' )low=0,high=1;elselow=1,high=0;if( high ){f[i][1]=min( f[i-1][1]+1,f[i-1][0]+2 );f[i][0]=min( f[i-1][1]+2,f[i-1][0]+2 );}else{f[i][1]=min( f[i-1][1]+2,f[i-1][0]+2 );f[i][0]=min( f[i-1][1]+2,f[i-1][0]+1 );}}printf( "%d\n",min(f[strlen(date)-1][0],f[strlen(date)-1][1]+1) );}return 0;
}