0
点赞
收藏
分享

微信扫一扫

hdu 2046 骨牌铺方格(简单dp)


骨牌铺方格


Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 33887    Accepted Submission(s): 16424



Problem Description


在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.

例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:


hdu 2046 骨牌铺方格(简单dp)_Memory


 



Input


输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0<n<=50)。


 



Output


对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。


 



Sample Input


1 3 2


 



Sample Output


1 3 2


 



Author


lcy


题目分析:初始dp[0]=1,转移方式有两种,竖着放dp[i]+=dp[i-1],还有横着放,dp[i]+=dp[i-2],会超int,注意
 

#include <cstring>
#include <cstdio>
#include <iostream>
#include <algorithm>
#define MAX 57

using namespace std;

int n;
long long dp[MAX];

int main ( )
{
    while ( ~scanf ( "%d" , &n ) )
    {
        memset ( dp , -1 , sizeof ( dp ) );
        dp[0] = 1;
        for ( int i = 1 ; i <= n ; i++ )
            for ( int j = n ; j >= 1 ; j-- )
                if ( j-2 >= 0 )
                    dp[j] = max ( dp[j] , dp[j-1] + dp[j-2] );
                else if ( j-1 >= 0 )
                    dp[j] = max ( dp[j] , dp[j-1] );
        printf ( "%lld\n" , dp[n] );
    }
}



举报

相关推荐

0 条评论