ブルート・フォースで歯が立たないものは,ちゃんと考えれば,簡単に答が出る。
Excel なんかを立ち上げて,再帰的にシコシコ計算式を書き込んでいけば,数分で答が出る。
R に直すのも,簡単。解答例は,この記事のコメントを参照。
n = 20 のとき,所要時間 0.1 秒以下で,3534526380 を得る(2 ≦ n ≦ 19 のときの解も,その他のノードの解も同時に求まってしまう)。
ブルート・フォースで歯が立たないものは,ちゃんと考えれば,簡単に答が出る。
Excel なんかを立ち上げて,再帰的にシコシコ計算式を書き込んでいけば,数分で答が出る。
R に直すのも,簡単。解答例は,この記事のコメントを参照。
n = 20 のとき,所要時間 0.1 秒以下で,3534526380 を得る(2 ≦ n ≦ 19 のときの解も,その他のノードの解も同時に求まってしまう)。
a = matrix(1, n, n)
for (k in 2:(n-1)) {
a[k+1, k] = a[k-1, k] + a[k+1, k-1]
a[k, k+1] = a[k, k-1] + a[k-1, k+1]
if (k == n-1) break
for (j in (k+2):n) {
a[j, k] = a[j-1, k] + a[j, k-1]
a[k, j] = a[k, j-1] + a[k-1, j]
}
}
for (k in 2:n) {
a[k,k] = a[k-1, k]*2
}
a
diag(a)
+ if (2 >= n) return(n)
+ a = matrix(1, n, n)
+ for (k in 3:n) {
+ if (k >= 4) {
+ for (i in 2:(k - 2)) {
+ a[i, k] = a[i - 1, k] + a[i, k - 1]
+ }
+ }
+ a[k - 1, k] = a[k - 2, k - 1] + a[k - 2, k]
+ }
+ 2 * a[n - 1, n]
+ }
> calc(10)
[1] 9724
> calc(20)
[1] 3534526380