小编Abr*_*led的帖子

SPOJ:M3TILE解决方案说明

我一直在努力解决这个编程问题,但由于我无法理解,我在网上找到了一个解决方案.但我真的不明白为什么这个解决方案有效..

任务是计算3*n(n >= 0,n是唯一输入)矩形可用多少种方式完全填充2*1多米诺骨牌.

例如(红线代表多米诺骨牌):

图片

这是我在阅读文本时首先在一张纸上绘制的内容,我看到3*2矩形可以有三种可能的组合,如果n是奇数,则解是0,因为没有办法然后填满整个矩形(一块将始终被多米诺骨牌覆盖).

所以我认为解决方案很简单3^n,如果n是偶数,并且0,如果n是奇数.原来,我错了.

我发现了一个相对简单的解决方案:

#include <iostream>

using namespace std;

int main()
{
    int arr[31];

    arr[0]=1;
    arr[1]=0;
    arr[2]=3;
    arr[3]=0;

    for(int i = 4; i < 31; i++) {
        arr[i] = arr[i-2] * 4 - arr[i-4]; //this is the only line i don't get
    }

    int n;

    while(1) {
        cin >> n;

        if(n == -1) {
            break;
        }

        cout << arr[n] << endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么这样做?!

c++ algorithm math permutation

7
推荐指数
1
解决办法
3784
查看次数

标签 统计

algorithm ×1

c++ ×1

math ×1

permutation ×1