桁DP
桁DP#典型DP
参考:Digit DP 入門 - torusさん
基本
N以下の値の全探索をDP化したもの。
「今見ている場所(上から何桁目)」「N未満が確定したかどうか」を最低限添え字に持つ。
その二つを基本として、添え字を加えていく形になる。例えば、「0以外の値をこれまでに使ったか?」など
①ABC007D 禁止された数字
4または9を含まない数字を数え上げる。4または9を使ったか?を添え字として持つ。
提出コード
②TDPC-E 数
提出コード
dで割ったあまりを添え字として持つ。
前半部分は使いまわせる。
③CODE FESTIVAL 2014A-D 壊れた電卓
想定解は桁DPじゃないらしい。
参考コード
提出コード
Aと等しい/Aより小さい/Aより大きい を添え字として持つ。
④yukicoder-No.189 SUPER HAPPY DAY
提出コード
各桁の和を添え字として持つ。
以下、桁DPバチャ
⑤EDPC-S Digit Sum
提出コード
各桁の和をDで割ったあまりを添え字に持つ。
(過去問の提出にアクセスできない場合を考え、一番典型的な実装であるこの問題のコードをここに置いておく)
code:cpp
using mint = modint1000000007;
mint dp100051012;
void _main(){
STR(s);
LL(d);
dp000=1;
ll n = s.length();
rep(i,n){
ll D = si-'0';
rep(j,2){
rep(k,d){
rep(nx,(j?10ll:D+1)){
dpi+1(k+nx)%dj|nx<D+=dpikj;
}
}
}
}
O((dpn00+dpn01-1).val());
}