uva 10918-Tri Tiling(法則)
664 ワード
タイトルリンク:uva 10918-Tri Tiling
nを与えて、1*2のタイルでどれだけの方法で3*nの地方を敷き詰めるかを計算します.
解題の構想:uva 10359-Tilingと少し似ているが、難易度は比較的に大きく、公式c[i]=4*c[i-2]-c[i-4].
導出過程:c[0]=1,c[2]=3,c[4]=c[2]*3+c[1]*2,c[6]=c[4]*3+(c[0]+c[2])*2.....
すなわち、c[i]=c[i−2]*3+2*Σ(0≦j≦−4)c[j]であり、前述の式に持ち込んで簡略化することができる.
nを与えて、1*2のタイルでどれだけの方法で3*nの地方を敷き詰めるかを計算します.
解題の構想:uva 10359-Tilingと少し似ているが、難易度は比較的に大きく、公式c[i]=4*c[i-2]-c[i-4].
導出過程:c[0]=1,c[2]=3,c[4]=c[2]*3+c[1]*2,c[6]=c[4]*3+(c[0]+c[2])*2.....
すなわち、c[i]=c[i−2]*3+2*Σ(0≦j≦−4)c[j]であり、前述の式に持ち込んで簡略化することができる.
#include <stdio.h>
#include <string.h>
#define ll long long
ll n, c[35];
void init() {
memset(c, 0, sizeof(c));
c[0] = 1;
c[2] = 3;
for (int i = 4; i <= 30; i++)
c[i] = 4 * c[i - 2] - c[i - 4];
}
int main() {
init();
while (scanf("%lld", &n), n!= -1) {
printf("%lld
", c[n]);
}
return 0;
}