zoukankan      html  css  js  c++  java
  • 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;
    }
    





  • 相关阅读:
    CSS3 target伪类简介
    不用position,让div垂直居中
    css3 在线编辑工具 连兼容都写好了
    a标签伪类的顺序
    oncopy和onpaste
    【leetcode】1523. Count Odd Numbers in an Interval Range
    【leetcode】1518. Water Bottles
    【leetcode】1514. Path with Maximum Probability
    【leetcode】1513. Number of Substrings With Only 1s
    【leetcode】1512. Number of Good Pairs
  • 原文地址:https://www.cnblogs.com/llguanli/p/6866376.html
Copyright © 2011-2022 走看看