hdu2067-小兔的棋盘

http://acm.hdu.edu.cn/showproblem.php?pid=2067

如图所示 , 矩阵关于y  = - x 即 x == y对称, 因此只需要算出其中的一半,然后乘二即可 ,第一行所有的数据均只能由左边传递过来 ,因此dp[ 0 ][ j ] =1 ;

其他的路径均可以通过上和左边传递过来,因此dp[ I ][ j ] = dp[ i - 1][ j ]  + dp[ i ] [ j - 1 ];

但是需要注意的地方是当i==j 的时候,因为图形只算了一半,所以这里需要特别考虑,因此当i== j的时候只能通过上边传递过来,所以,当 i == j 的时候,dp[ i ][ j ] = dp[ i - 1 ][ j ];



#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "math.h"
#include "algorithm"
#include "iostream"

using namespace std;
#define maxn 10005 
long long  dp[ maxn ][ maxn ];
 
int main()
{
	int i , j , n ;
	for( i = 1 ; i <= 35 ; i++ )
		dp[ 0 ][ i ] = 1 ;
	for( i = 1 ; i <= 35 ; i++ )
	{
		for( j = 1 ; j <= 35 ; j++ )
		{
			if( j == i ) 
				dp[ i ][ j ] = dp[ i - 1 ][ j ] ;
			else
				dp[ i ][ j ] = dp[ i - 1 ][ j ] + dp[ i ][ j - 1 ] ;
		}
	}
	int Case = 0 ;
	while( ~scanf( "%d" , &n ) )
	{
		if( n == -1 )
			break;
		printf( "%d %d %I64d\n" , ++Case , n , dp[ n ][ n ] * 2 ) ;
	} 
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值