• HDU 5336 The mook jong (DP)


    The mook jong

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 217    Accepted Submission(s): 160


    Problem Description
    ![](../../data/images/C613-1001-1.jpg)

    ZJiaQ want to become a strong man, so he decided to play the mook jong。ZJiaQ want to put some mook jongs in his backyard. His backyard consist of n bricks that is 1*1,so it is 1*n。ZJiaQ want to put a mook jong in a brick. because of the hands of the mook jong, the distance of two mook jongs should be equal or more than 2 bricks. Now ZJiaQ want to know how many ways can ZJiaQ put mook jongs legally(at least one mook jong).
     
    Input
    There ar multiply cases. For each case, there is a single integer n( 1 < = n < = 60)
     
    Output
    Print the ways in a single line for each case.
     
    Sample Input
    1
    2
    3
    4
    5
    6
     
    Sample Output
    1
    2
    3
    5
    8
    12
     
    Source
     
    题意:ZJiaQ为了强身健体,决定通过木人桩练习武术。ZJiaQ希望把木人桩摆在自家的那个由1*1的地砖铺成的1*n的院子里。由于ZJiaQ是个强迫症,所以他要把一个木人桩正好摆在一个地砖上,由于木人桩手比较长,所以两个木人桩之间地砖必须大于等于两个,现在ZJiaQ想知道在至少摆放一个木人桩的情况下,有多少种摆法。
     
    分析:
    1、这道题暴力打表其实可以找出规律
    2、用dp来做就是设dp[i][0]表示在第i个格子里面不放木桩,dp[i][1]表示在第i个格子里面放木桩。
    如果当前格子放木桩的话:那么dp[i][1]=dp[i-3][0]+dp[i-3][1]
    如果当前格子不放木桩的话,那么dp[i][0]=dp[i-1][0]+dp[i-1][1]
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<cstdio>
    #include<string>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<stack>
    #include<queue>
    #include<vector>
    #include<map>
    #include<stdlib.h>
    #include<algorithm>
    #define LL __int64
    using namespace std;
    const int MAXN=60+5;
    LL dp[MAXN][2],n;
    void init()
    {
        dp[1][0]=0;dp[1][1]=1;
        dp[2][0]=1;dp[2][1]=1;
        dp[3][0]=2;dp[3][1]=1;
        for(int i=4;i<=65;i++)
        {
            dp[i][0]=dp[i-1][0]+dp[i-1][1];
            dp[i][1]=dp[i-3][0]+dp[i-3][1]+1;
        }
    }
    
    int main()
    {
        init();
        //freopen("in.txt","r",stdin);
        while(scanf("%d",&n)!=EOF)
        {
            printf("%I64d
    ",dp[n][0]+dp[n][1]);
        }
        return 0;
    }
    View Code
     
     
  • 相关阅读:
    kafka 订单应用需求
    Centos7快速搭建博客
    Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
    5G关键技术评述
    ganglia安装
    zookeeper安装
    hadoop安装过程
    redis持久化的操作和介绍
    windows下的anacond使用pip安装组件操作
    Java客户端连接Hbase,并创建表(超详细)
  • 原文地址:https://www.cnblogs.com/clliff/p/4714809.html
Copyright © 2020-2023  润新知