30

漸化式×場合の数

4814
0

目次

  1. はじめに
  2. 考え方
  3. 例題
  4. 演習問題
  5. おわりに

はじめに

初めまして!奏といいます。Mathlogへの憧れでこの度記事を書くことにしました。
私の話はさておき、この記事では場合の数の問題を漸化式を用いて処理するテクニックについて紹介します。ある界隈では「動的計画法」と呼ばれているようですが、筆者があまり詳しくないのでここでの使用は避けます。競技数学でも受験数学でも広く使える考え方です。漸化式および数列の基本的な知識を前提としています。

考え方

さて、この考え方を端的に言うと、「一般化することで再帰的な構造をもつ場合の数の問題について、漸化式を立てて調べ上げる」ということになります。なるほど、意味不明ですね。具体例を見ていく方がわかりやすいので、以下のような問を考えてみましょう。

階段を1歩につき1段または2段登るとき、8段の階段を登る方法は何通りですか?

色々な解法が考えられそうです。筆者は「2段登った回数で場合分け」、「気合いで数え上げ」、そして「漸化式で処理」あたりがパッと思いつきました。いずれも有効ですが、ここでは漸化式を用いた解法を紹介します。

以下、解説です。

※自分で考えたい方はネタバレ注意です。

まず、一般にn段の階段を登る方法をan通りとします。a8の値を求めればよいことになります。ここで、あと1歩で登り切れるという状況は、「ちょうど6段または7段を登った」ときなので、a8=a7+a6 が成立します。

補足6段を登ったとき、残りの登り方は2通りあるのでは?と考える方もいるかもしれませんが、そのうち2歩かけて登る際に7段目を踏みますよね。なのでこれで漏れなく、重複なく数えることができています。最後の1歩で登る段数によって場合分けをしていると言うと分かりやすいでしょうか。

同様にして、一般に漸化式 an+2=an+1+an を得ます。今回の問題設定は3項間漸化式に対応するわけですね。
さて、漸化式が機能するためには初期条件が必要でした。これは調べ上げですぐにa1=1,a2=2が分かります。後はa3=2+1=3,a4=3+2=5,...と調べていくことで、求める場合の数はa8=34通りです。


以上が全体の解法の流れになります。改めてまとめると、

  1. 実験などから場合分けで再帰的な構造を発見し、漸化式を立てる
  2. 数え上げである値を調べて、漸化式を繰り返し用いてもとの値を求める

ということになります。再帰的、とは同じ形式の問題に帰着できるということです。今回の問題であればもとの問題から同様に1段や2段を登るというより簡単な問題に置き換えられました。
また、多くの場合漸化式を解くことはあまりメリットがありません。例えば、先ほどの漸化式(フィボナッチ数列といいます)の解は

an=15{(1+52)n+1(152)n+1}

という形で表されます。これを求めてn=8を展開...やめておきましょう。素直に1つずつ求めるのがよさそうです。

例題

続いて、もう1つ頻出のパターンを紹介します。例題を見ながら考えていきましょう。

OMC128-C

2×6のマス目があり、各マスに1,2,4のいずれかを書き込みます。このとき、辺で隣り合う2マスに書き込まれた整数が常に互いに素となるような書き込み方は何通りありますか?

整数との融合問題ですね。筆者のお友達の問題です。作問がうまい。

先ほどと本質的な考え方は同じなので少し考えてみてください。下に進むと解説が始まります。


まずは条件を整理すると、偶数どうしが隣り合ってはならないので、隣り合うマスの少なくとも一方は1です。逆に、これは題意を満たすための十分条件でもあります。

この事実を踏まえて、マス目を便宜上26列とします。マス目は横長なのでまずは各列について考察しましょう。各列の数字を上から(x,y)のように表記すると(1,1),(1,2),(1,4),(2,1),(4,1)5つのパターンが考えられます。
また、各列のそれぞれのパターンと隣り合うことができるパターンは常に5,3,3,3,3通りと分かります。このパターンをいい感じに並べていけばよさそうです。構造がかなり見えてきましたね。

それではいよいよ漸化式を立てていきます。一般に2n列のマス目について、左から書き込んでいくこととします。
ここが本問の山場なのですが、(1,1)以外のパターンはどのパターンについても「(1,1)とは隣合ってよく、その他に自身以外のちょうど2つのパターンと隣合うことができる」という性質があります。すなわち、これら4つのパターンには対称性があるので、書き込み方のうち最も右の行が(1,1)であるものをan通り、そうでないものをbn通りとします。求める値はa6+b6ですね。

すると、先ほどまでの議論から、1つ左の行のパターンとの組合せに注意して書き込んでいくことを考えると

{an+1=an+bnbn+1=4an+2bn

が成立します。この問題は連立漸化式を立てることで解くことができたのです。
後は例のごとく初項a1=1,b1=4を引っ張ってくることで、終わり...でも良いのですが、せっかくなのでもう一工夫できないでしょうか?

漸化式の形と求める値をじーっと見ると、答えはa7であると分かります。よって、漸化式をいい感じに変形して、an+2=3an+1+2an という形にするとその後の計算が半分になりますね。a1=1,a2=5から順に調べると求める値はa7=2753 通りです。


というわけで、連立漸化式の紹介でした。最後の変形は元々サイトにあったものをお借りしているのですが、本当に練られていますよね。( 出典はこちら )
3項間漸化式と合わせてこれらが圧倒的に頻出だと思います。最後に、その他のトリッキーな漸化式の問題を1つ紹介して例題解説を終えます。


JMO'07yo-07

どれも3の非負整数乗であるいくつかの整数の和として100を表す方法は何通りあるか。ただし、和をとる順番のみが異なるものは同じ表し方とみなす。

JMOからの出題です。初見のときはかなり苦戦しました...

「漸化式を用いる」をヒントにぜひ一度挑戦してみて下さい。

それでは下に進むと解説です。なかなか重たいですが頑張りましょうね。


解説に早速入りますが...ひとまず実験してみましょう。

一般に、3の非負整数乗であるいくつかの整数の和としてnを表す方法をan通りとします。求める値はa100ですね。

実験
n=1のとき、1=1(1通り)
n=2のとき、2=1+1(1通り)
n=3のとき、3=1+1+1=3(2通り)
n=4のとき、4=1+1+1+1=1+3(2通り)
n=5のとき、5=1+1+1+1+=1+1+3(2通り)
n=6のとき、6=1+1+1+1+1+1=1+1+1+3=3+3(3通り)

さて、ここから何が言えるでしょう。

前後の項に着目すると、「添字が3の倍数のときには値が増加して、そうでないときは変わらない」という予想が立つといい感じです。値がどのように増えるかはちょっと情報不足なので、まずは後半から考えていきましょう。

任意のnについて、a3n+2=a3n+1=a3n

このように表現できますね。便宜上a0=1としています。さて、実験のn3の倍数でない部分から一つ気づきたいのは「1は必ず使う」ということです。言われてみれば、1がないと和は3の倍数になってしまうので当たり前に思えますが、これは手を動かしてみないと意外と見えません。実験は世界を救います。

任意のnについて、3n+1を表す際、1を使わないと仮定すると和は3の倍数となり矛盾する。よって、1を初めに1つ用意すると、残りの3nの表し方と3n+1の表し方は11に対応する。すなわちa3n+1=a3nである。
同様にしてa3n+2=a3n+1が従い、予想は示された。

さて、漸化式がたったから例のごとく初期条件を...といきたいところですが、これだけでは解けません。実際、a3nの添字を小さくすることができません。筆者はここで困りました...
a3nで困っている理由は、必ず使うと断定できる数が存在しないからです。このあたりは丁寧に言語化していきましょう。初心に帰って漸化式を立てる方針を確認すると「場合分けで再帰的な構造を見つける」とのことです。階段の例がまさにそれでした。

先ほどの議論を応用することを念頭に置くと、「1を使うかどうか」で場合分けという方針が見えてきます。以下、a3nの別の表現を探ります。

  1. 1を使う場合
    これは上の議論と同じです。残りの3n1を分解する方法を考えればよいので、表し方はa3n1=a3(n1)通りです。後のことを考えて漸化式でできるだけ添字を小さくしておきましょう。
  2. 1を使わない場合
    このときはちょっと訳が違ってきそうです。困ったら再び実験しましょう。
実験
n=1のとき、3=3(1通り)
n=2のとき、6=3+3(1通り)
n=3のとき、9=3+3+3=9(2通り)
n=4のとき、12=3+3+3+3=3+9(2通り)
n=5のとき、15=3+3+3+3+3=3+3+9(2通り)
n=6のとき、18=3+3+3+3+3+3=3+3+3+9=9+9(3通り)

お〜、なんだか見覚えのある並びですね。

具体的には、anと全く同じ挙動をしています。これは、1を使わない場合には全ての数が3の倍数で表されているために、両辺を3で割ることでnを表す方法に帰着するからです。よって、これはan通りです。

以上より、a3n=a3(n1)anです。一度事実を整理しておきましょう。

任意のnについて、a3n+2=a3n+1=a3n=a3(n1)+an

それではいよいよa100を計算しましょう。
実験より、a1=a2=1,a3=2なので、a5=a4=a3=2,a6=a3+a2=3...
あれ、これを100までやるのは少し大変そうですね。3つごとに同じ値を取ることに着目すると計算は高々33回なのでいけなくはないのですが、多くのことを学んで頂きたいのでここでは漸化式のもう一つの使い方を紹介します。

それは「求める値の添字を落とす」ということです。これまでは漸化式を得たら「添字の小さいものから全て順に調べていく」という手法を取っていました。ここでは逆に「a100を漸化式を用いて変形していく」ということをします。やや出題頻度は低いですが、むしろ素直な方法だと筆者は感じます。

さて、実際に計算すると、
a100=a99=a33+a96=a11+a30+a31+a93...
ん〜、項の数がどんどん増えてしまいます。さあ、この問題の最大の壁にぶつかりました。どうしたものでしょうか。
結論からいうと、漸化式の形から、添字が3の倍数のものを処理する際には必ず項が2つに分かれてしまうので、項が極端に少ないまま計算するのは難しいと思います。ということで、せめて扱いやすい形に持ち込みたいものです。

そんな動機で再び漸化式とにらめっこすると、a3na3(n1)=anという形が見えてきます。これは、「a3nの階差数列がanである」ということを示します。(厳密にはan1です)

よって、このことを念頭に置くと、
a100=a99=i=133ai+a0=i=033ai=3i=010a3i+a33=3i=010a3i+i=010ai+a11
と変形できます。後半の変形はa3n+2=a3n+1=a3nを用いています。シグマの各項にも同様の議論をすることで、
i=010a3i=i=010j=0iaj=i=010(11i)ai
を得ます。ここの変形は本質部分ではないので割愛しますが、実際に項を書き並べてみると理解できるかと思います。
後は下り坂ですね。計算して求める値は
3i=010(11i)ai+i=010ai+a11=i=011(343i)ai=93a0+66a3+39a6+12a9=402

となります。


いや〜お疲れ様でした。筆者は計算を合わせるのに1時間かかりました。難易度がぐんと上がったのですが、「実験などから構造を理解したのち、場合分けをして漸化式に落とし込む」という同様のプロセスが使えることを体感して頂けたらすごく嬉しいです。全然見た目の異なる問題を同一視できる点が数学の楽しさだと思います。

これにて解説は終了です。演習問題を以下に用意しました。OMCからの問題の解説はリンクに飛ぶことで確認して下さい。

演習問題

JMO'11yo-9

赤、青、黄色の玉を合わせて12個一列に並べる方法で、どの球についても同じ色の隣接する球があるようなものは何通りか。ただし、並べる球の色が2色以下の場合も考えるものとする。

9番にしては易しい印象を受けます。あまり怯えすぎないで下さいね。

解説一般に、n個の球を並べる方法をan通りとする。n+2個の球を左から並べることを考えると、n個目とn+1個目の色が同じであるとき、場合の数はan+1通り。n個目とn+1個目の色が異なるとき、最後の2個の色の組は2通りなので、場合の数は2an通り。
よって、an+2=an+1+2anであり、a2=a3=3と合わせて求める値はa12=2049通りである。
OMC091D

210列のマス目のそれぞれに矢印 ↑、↓、←、→ のいずれか1つを書き込む方法であって、以下の条件をみたすものは何通りありますか?
・どのマスMについても、Mと辺を共有するマスであって、そこに書き込まれた矢印がMを指すものがちょうど1個存在する。

個人的にOMCで1番の良問だと思っています。
出典および解説はこちら

自作

以下を満たすための正整数nに関する必要十分条件を求めて下さい。
・サイコロをn回投げるとき、出目の総和が5の倍数となる確率は15より大きい。

証明問題を添えてみました。設定がシンプルでお気に入りです。

解説
一般に、n回サイコロを降ったとき、出目の総和をSnとし、これが5で割ってi余るような方法をan,i通りとする。(i=0,1,2,3,4)
ここで、このような方法はSn1Sn1(mod5)のときn回目に1,6が出ればよいため2an1,i1通りである。そうでないときn回目の出目は一意に定まることから6n1an1,i1通りある。すなわち、an,i=6n1+an1,i1が成立する。ただし、an,1=an,4とした。

nが5の倍数でないとき、漸化式を繰り返し用いれば、
an,0=6n1+6n2+6n3+......+6+a1,i=k=0n16k=6n15
を得る。a1,iについて、i=0,2,3,4のいずれかであることに留意せよ。場合の数の総数が6n通りであることより、不適である。

n5の倍数のとき、同様の議論から以下を得る。
an,0=k=1n16k+a1,1=6n+45
よって、このとき題意を満たすことが分かるので求める条件は「n5の倍数であること」である。

おわりに

ここまで読んで下さりありがとうございました。初めてこの手法を学ぶ方を想定して記事を作成したつもりです。記事を書くのが初めてなので、「ここの説明がわからない」などあれば教えて下さい。もちろん感想も大歓迎です。
今回取り上げた手法は私が競技数学を好きになったきっかけともいえるものです。いつか記事を書くときには題材はこれにしようと決めていました。少しでも面白いなと思って頂ければ幸いです。ではまた。

投稿日:20221216
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

奏
30
4814

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. 目次
  2. はじめに
  3. 考え方
  4. 例題
  5. 演習問題
  6. おわりに