HDU 5366:The mook jong 递推

The mook jong

Accepts: 506

Submissions: 1281

Time Limit: 2000/1000 MS (Java/Others)

Memory Limit: 65536/65536 K (Java/Others)

问题描写叙述

ZJiaQ为了强身健体。决定通过木人桩练习武术。

ZJiaQ希望把木人桩摆在自家的那个由1*1的地砖铺成的1*n的院子里。

因为ZJiaQ是个强迫症,所以他要把一个木人桩正好摆在一个地砖上,因为木人桩手比較长。所以两个木人桩之间地砖必须大于等于两个,如今ZJiaQ想知道在至少摆放一个木人桩的情况下,有多少种摆法。

输入描写叙述

输入有多组数据。每组数据第一行为一个整数n(1 < = n < = 60)

输出描写叙述

对于每组数据输出一行表示摆放方案数

输入例子

1
2
3
4
5
6

输出例子

1
2
3
5
8
12

这个题目有一个递推关系就是f[n]=f[n-1]+f[n-3]+1

怎么来的呢。就是当1*n-1个格子扩展到1*n的格子时,

当多出来的那一个格子为0时,数量=f[n-1]

当多出来的那一个格子为1时,数量=f[n-3]再加上新来的那个为1的格子,多了一种排法,即f[n-3]+1

事实上一个循环全然能够做,但当时着急对着这个公式写了一个递归,结果到五十几的时候出不来结果 ,太慢了,索性由于输入也不多就直接打表。。。

代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std;

int num;
long long a[65];

int main()
{
	a[1]=1;
	a[2]=2;
	a[3]=3;
	a[4]=5;
	a[5]=8;
	a[6]=12;
	a[7]=18;
	a[8]=27;
	a[9]=40;
	a[10]=59;
	a[11]=87;
	a[12]=128;
	a[13]=188;
	a[14]=276;
	a[15]=405;
	a[16]=594;
	a[17]=871;
	a[18]=1277;
	a[19]=1872;
	a[20]=2744;
	a[21]=4022;
	a[22]=5895;
	a[23]=8640;
	a[24]=12663;
	a[25]=18559;
	a[26]=27200;
	a[27]=39864;
	a[28]=58424;
	a[29]=85625;
	a[30]=125490;
	a[31]=183915;
	a[32]=269541;
	a[33]=395032;
	a[34]=578948;
	a[35]=848490;
	a[36]=1243523;
	a[37]=1822472;
	a[38]=2670963;
	a[39]=3914487;
	a[40]=5736960;
	a[41]=8407924;
	a[42]=12322412;
	a[43]=18059373;
	a[44]=26467298;
	a[45]=38789711;
	a[46]=56849085;
	a[47]=83316384;
	a[48]=122106096;
	a[49]=178955182;
	a[50]=262271567;
	a[51]=384377664;
	a[52]=563332847;
	a[53]=825604415;
	a[54]=1209982080;
	a[55]=a[54]+a[52]+1;
	a[56]=a[55]+a[53]+1;
	a[57]=a[56]+a[54]+1;
	a[58]=a[57]+a[55]+1;
	a[59]=a[58]+a[56]+1;
	a[60]=a[59]+a[57]+1;
	while(cin>>num)
	{
		cout<<a[num]<<endl;
	}

	return 0;
}
时间: 2024-10-11 12:43:46

HDU 5366:The mook jong 递推的相关文章

HDU 5366 The mook jong

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5366 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 con

HDU 5366 The mook jong (动态规划,详解)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5366 题面: The mook jong Accepts: 221 Submissions: 306 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description ZJiaQ want to become a strong man, so he decided

HDU - 5366 The mook jong (dp动态规划)

The mook jong Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 62    Accepted Submission(s): 40 Problem Description ![](../../data/images/C613-1001-1.jpg) ZJiaQ want to become a strong man, so h

Hdu 5366 The mook jong 公式求解

The mook jong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) 问题描述 ZJiaQ为了强身健体,决定通过木人桩练习武术.ZJiaQ希望把木人桩摆在自家的那个由1*1的地砖铺成的1*n的院子里.由于ZJiaQ是个强迫症,所以他要把一个木人桩正好摆在一个地砖上,由于木人桩手比较长,所以两个木人桩之间地砖必须大于等于两个,现在ZJiaQ想知道在至少摆放一个木人桩的情况下,有多

HDU 5366 The mook jong (简单DP)

题意:ZJiaQ希望把木人桩摆在自家的那个由1*1的地砖铺成的1*n的院子里.由于ZJiaQ是个强迫症,所以他要把一个木人桩正好摆在一个地砖上,由于木人桩手比较长,所以两个木人桩之间地砖必须大于等于两个,现在ZJiaQ想知道在至少摆放一个木人桩的情况下,有多少种摆法. 思路:题意类似于“要求找到所有满足这样要求的二进制的数:(1)不能出现101   (2)不能出现11  (3)不能为0”. 问题是可以降低规模的,也就是也可以递推,假设cnt[i][0]表示第i位放0的所有可能数,cnt[i][1

hdu 5366 The mook jong dp

The mook jong Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 263    Accepted Submission(s): 200 Problem Description ![](../../data/images/C613-1001-1.jpg) ZJiaQ want to become a strong man, so

hdu 5366 The mook jong 动态规划(BC 50 C题)

比赛的时候还是没做出来,BC又是做一题,估计又是要掉分了,慢慢提升,总会终结一题的命运... 思路: 动态规划,然而我刚开始学,并不会做啊...先是找规律找了半天,结果啥也没找出来,又开始深搜, 结果样例能过,交上超时了,深度太大啊,没有正确估算...赛后看了题解,动态规划真是神算法啊,简单几行就 搞定了.设一个数组d[n]表示地板总数(n>3)然后列出状态转移方程d[n] = d[n-1] + (d[n-3] + 1);可以 这样理解,n是在n-1个地板上加上一个地板,我们可以对这个新增的地板

hdu 4869 Turn the pokers(递推&amp;组合数学&amp;逆元)

Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1279    Accepted Submission(s): 466 Problem Description During summer vacation,Alice stay at home for a long time, with nothing t

hdu 1284 钱币兑换问题 (递推 || DP || 母函数)

钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5069    Accepted Submission(s): 2868 Problem Description 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法.请你编程序计算出共有多少种兑法. Input 每行只有一个正整数N,N小于32768. Outpu