HDU 2577 How To Type DP

哈哈~这题秒掉了,总的来说这些天的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;
  		   else
		   	   f[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;
		   		else
		   			low=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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值