我一直在努力解決this programming problem,但由於我無法弄清楚,我在網上找到了一個解決方案。但我不明白爲什麼這個解決方案仍然可以正常工作..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;
}
爲什麼這項工作?
尼斯的證明!更多信息請訪問http://oeis.org/A001835 – 2013-05-05 20:40:32
@Daniel您能解釋一下對應於n = 0的基本情況嗎? – 2014-08-03 10:25:04
@ATulSingh對於n = 0,我們有一個沒有細胞的板子。有一種方法可以將其平鋪:不在其上放置瓦片[3×0板上有3·0 = 0個單元,所以你需要0 /(2·1)= 0/2 = 0個瓦片。 – 2014-08-12 14:41:40