質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

445閲覧

「プログラマ脳を鍛える数学パズル」のQ15に関して

yhmr

総合スコア53

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2017/11/15 04:58

###わからないこと

『プログラマ脳を鍛える 数学パズル』という書籍の「Q15 階段で立ち話」において、動的計画法を用いた解法の解説に

「2人が同じ段になる」ということは「1人が偶数回の移動で逆の位置に着く」、と言い換えられますので

とあるのですが、このロジックがわかりません。
解答をいただければ幸いです。

###前提

Q15の問題文を一部抜粋します。

ある階段を下からAさんが上がっていくと同時に、上からBさんが下りてきます。
階段は1段ずつ上がる(下りる)必要はなく、最大で3段まで飛ばして進む(一気に4段進む)ことができます。

ただし、何段飛ばす時も、1回の移動にかかる時間は同じとします。
2人が同時に1回ずつ移動するとき、「2人が同じ段に止まるような動き方」が何通りあるかを考えます。

###試したこと

問題について把握するため、解答にあったコードの写経をしました。
(rubyで書かれていたものをそのままPythonで書き換えていますが…)

dpが「Bさんがi回目の移動でインデックスの位置に着くパターン数」を表すことは把握できましたが、なぜ目的の数が得られるのかはわかりませんでした…

N = 10 # 段数 STEPS = 4 # 歩幅 dp = [0] * (N + 1) # Bさんのいる位置のパターン cnt = 0 dp[N] = 1 # 開始位置を初期化 for i in range(N): # i回目の移動後にBさんがいる位置のパターンを計算 for j in range(N + 1): # 移動元の段 for k in range(1, STEPS + 1): if k > j: break dp[j - k] += dp[j] dp[j] = 0 # 移動元をクリア ''' ここがわからない Aさんの初期位置に偶数回目の移動で到達する数を足し合わせている? ''' cnt += dp[0] if i % 2 == 1 else 0 print(cnt)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

AさんとBさんが同じ段に来たところから、Bさんが辿ってきた逆順でAさんが階段を登っていくと、ここまで来たのと同じ回数で上まで到着することになります。

なので、Aさんの全行程は偶数回になって、「偶数回で階段を登りきる1パターン」=「上下から同じ回数で同じ段に到着する1パターン」の対応が成立します。

投稿2017/11/15 05:12

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yhmr

2017/11/15 05:42

ご回答ありがとうございます! >ここまで来たのと同じ回数で上まで到着することになります。 この一言でハッとなりました。 私の理解度を汲み取っていただいた上で、端的で非常にわかりやすいご回答でした。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問