POJ 2506 Tiling ( 递推 + 大数 )
发布时间:2020-12-14 03:33:37 所属栏目:大数据 来源:网络整理
导读:题目链接:http://poj.org/problem?id=2506 ? 这个题和校赛的热身赛最后一个很类似啊,就是一个递推,还有个大数。 ? 推规律倒是不难 n = 1的时候结果是这个样子的,就一种情况 ? n = 2的时候,结果是3种情况 那么第3种呢?以及第n种,是第n - 1种加上一个2
题目链接:http://poj.org/problem?id=2506 ? 这个题和校赛的热身赛最后一个很类似啊,就是一个递推,还有个大数。 ? 推规律倒是不难 n = 1的时候结果是这个样子的,就一种情况 ? n = 2的时候,结果是3种情况 那么第3种呢?以及第n种,是第n - 1种加上一个2X1的矩,或者n - 2种加上一个2X2的矩阵,但因为两个并列的2X1的矩阵(一个2X2的矩阵)会和n - 1的重复,所以去掉,那么就会得出f(i) = f(i - 2) * 2 + f(i - 1); 这样就只剩下大数问题了。 #include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> int num[300][1000]; int main() { int n; int i,k; memset(num,sizeof (num)); num[0][0] = 1; num[1][0] = 3; for (i = 2;i < 251;i++) { for (k = 0;k < 1000;k++) num[i][k] = num[i - 1][k] + num[i - 2][k] * 2; for (k = 0;k < 1000;k++) if (num[i][k] >= 10) { num[i][k + 1] += num[i][k] / 10; num[i][k] %= 10; } } while (~scanf ("%d",&n)) { if (n == 0) { printf ("1n"); continue; } for (i = 999;i >= 0;i--) if (num[n - 1][i] != 0) break; for (;i >= 0;i--) printf ("%d",num[n - 1][i]); printf ("n"); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |