HDU5366 The mook jong (DP)

The mook jong

问题描述
ZJiaQ为了强身健体,决定通过木人桩练习武术。ZJiaQ希望把木人桩摆在自家的那个由1*1的地砖铺成的1*n的院子里。由于ZJiaQ是个强迫症,所以他要把一个木人桩正好摆在一个地砖上,由于木人桩手比较长,所以两个木人桩之间地砖必须大于等于两个,现在ZJiaQ想知道在至少摆放一个木人桩的情况下,有多少种摆法。
输入描述
输入有多组数据,每组数据第一行为一个整数n(1 < = n < = 60)
输出描述
对于每组数据输出一行表示摆放方案数
输入样例
1	
2
3
4
5
6
输出样例
1
2
3
5
8
12

dp的题做的很少,看到题基本都没思路,大概多做些能好?

代码:

/************************************************
Problem : 5366 ( The mook jong )     Judge Status : Accepted
RunId : 14463983    Language : G++    Author : G_lory
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
************************************************/
#include <iostream>
#include <cstdio>
using namespace std;

//令f[i]为最后一个木人桩摆放在i位置的方案,令s[i]为f[i]的前缀和

const int N = 65;
long long f[N];
long long s[N];

int main()
{
    f[1] = 1; f[2] = 1; f[3] = 1;
    s[1] = 1; s[2] = 2; s[3] = 3;
    for (int i = 4; i <= 60; ++i) {
        f[i] = s[i - 3] + 1;
        s[i] = s[i - 1] + f[i];
    }
    int n;
    while (scanf("%d", &n) == 1)
        printf("%lld\n", s[n]);
    return 0;
}

  

posted @ 2015-08-12 13:01  我不吃饼干呀  阅读(239)  评论(0编辑  收藏  举报