トップページに戻る
次の増井さんの書籍の問題へ
前の増井さんの書籍の問題へ
Q23 ブラックジャックで大儲け!?
C#のソース
using System;
using System.Linq;
class Program
{
static void Main()
{
Solve(1, 4);
Solve(10, 24);
}
static void Solve(int pFirstCoinCnt, int pGameCnt)
{
int UB = pFirstCoinCnt + pGameCnt;
//場合の数[コインの枚数]なDP表
int[] PrevDP = new int[UB + 1];
PrevDP[pFirstCoinCnt] = 1;
for (int I = 1; I <= pGameCnt; I++) {
int[] CurrDP = new int[UB + 1];
for (int J = 1; J <= UB; J++) {
if (PrevDP[J] == 0) continue;
Action<int> UpdateAct = (pNewJ) =>
{
if (pNewJ == 0) return;
CurrDP[pNewJ] += PrevDP[J];
};
UpdateAct(J - 1);
UpdateAct(J + 1);
}
PrevDP = CurrDP;
}
Console.WriteLine("最初のコイン枚数={0}。ゲーム回数={1}の場合は、{2}通り",
pFirstCoinCnt, pGameCnt, PrevDP.Sum());
}
}
実行結果
最初のコイン枚数=1。ゲーム回数=4の場合は、6通り
最初のコイン枚数=10。ゲーム回数=24の場合は、16051010通り
解説
動的計画法でナイーブに解いてます。