uva 10359 - Tiling(规律)

来源:互联网 发布:广州网店美工培训 编辑:程序博客网 时间:2024/05/21 10:55

题目链接:uva 10359 - Tiling


题目大意:有两种瓷砖1*2和2*2的若干个(无限),给出n,问有多少种方法将2*n的面积铺满。


解题思路:cnt[i] = cnt[i - 1] + 2 * cnt[i - 2], 大数。


#include <stdio.h>#include <string.h>#define ll long long#define max(a, b) (a)>(b)?(a):(b)const int N = 255;int cnt[N][N];void add(int ans[], int a[], int b[]) {int sum = 0;ans[0] = max(a[0], b[0]);for (int i = 1; i <= ans[0]; i++) {if (i <= a[0]) sum += a[i];if (i <= b[0]) sum += b[i] * 2;ans[i] = sum % 10;sum /= 10;}while (sum) {ans[++ans[0]] = sum % 10;sum /= 10;}}void init() {memset(cnt, 0, sizeof(cnt));cnt[0][0] = cnt[1][0] = cnt[0][1] = cnt[1][1] = 1;for (int i = 2; i < N; i++)add(cnt[i], cnt[i - 1], cnt[i - 2]);}int main () {int n;init();while (scanf("%d", &n) == 1) {for (int i = cnt[n][0]; i; i--)printf("%d", cnt[n][i]);printf("\n");}return 0;}



原创粉丝点击