加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

poj 2506 递推+大数

发布时间:2020-12-14 02:23:21 所属栏目:大数据 来源:网络整理
导读:题意:用2*1或者2*2的砖铺2*n有多少种铺法。 思路:容易知道递推式为f[n] = 2*f[n-2]+f[n-1]。用数组表示即可。 #include cstdio#include cstring#include algorithm#include cmath#include queue#include cstdlibusing namespace std;#define clc(s,t) mems

题意:用2*1或者2*2的砖铺2*n有多少种铺法。

思路:容易知道递推式为f[n] = 2*f[n-2]+f[n-1]。用数组表示即可。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <cstdlib>
using namespace std;
#define clc(s,t) memset(s,t,sizeof(s))
#define INF 0x3fffffff
#define N 250
int s[260][1000];
int n;
void create(){
    int i,j;
    clc(s,0);
    s[0][0] = s[1][0] = 1;
    for(i = 2;i<=250;i++){
        for(j = 0;j<995;j++)
            s[i][j] = s[i-1][j];
        for(j = 0;j<995;j++){
            s[i][j] += s[i-2][j]*2;
            s[i][j+1] += s[i][j]/10;
            s[i][j] %= 10;
        }
    }
}
void print(int s[1000]){
    int i;
    for(i = 995;!s[i];i--)
        ;
    for(;i>=0;i--)
        printf("%d",s[i]);
    putchar('n');
}
int main(){
    create();
    while(scanf("%d",&n) != EOF)
        print(s[n]);
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读