巨大な整数Nが与えられてN以下の非負の整数から条件を満たすものの数を数え上げる時に使える動的計画法アルゴリズム
自分の実装例
DP S 1以上K以下の整数のうち、十進表記における各桁の数字の総和が Dの倍数
ABC154E 1以上 N以下の整数であって、 10進法で表したときに、0でない数字がちょうど K個
上位i桁についての情報を使ってi+1桁の場合の情報を求める
python
for k in range(K + 1):
new_less[k] += less[k] # for 0
new_less[k + 1] += 9 * less[k] # for 1..9
ただし上位i桁がNと一致してる場合だけは例外
最後にNに一致する場合が条件を満たすなら回答+1する
自然に実装すると「0以上の整数」についての値になるので問題条件によっては0の場合を引く