↓で紹介した美しすぎるプログラムの解説を少し書いておく。 美しすぎるプログラムを解読せよの巻 http://d.hatena.ne.jp/yaneurao/20101013 配列dpの意味だが、 dp[r][i0][i1][i2][i3][i4][i5][i6][i7][i8][i9] は、r桁の数字において、10進数で各桁を見たときに ・"0"の出現回数が(3-i0)回以内、 ・"1"の出現回数が(3-i1)回以内、 … ・"9"の出現回数が(3-i9)回以内 であるような数の個数。このプログラムは(3-i0)のように補数(?)になっているのでちょっとわかりにくいと思う。 さて、例えば、r = 6(6桁)の場合について考えてみると、6桁というのは、5桁の数の左に1桁追加して出来る数だから、その左側に追加される1桁の数字が"0","1","2",…,"9"の場合それぞれについて考えてみる。