問題. 755
整数 が与えられる.
以上
以下の整数のうち,各桁が数字 '3', '5', '7' のいずれかで,かつ,'3', '5', '7' の数字が少なくとも1回以上現れるものの数を求めよ.
制約:
解法2. 桁DP
の桁数による動的計画法である桁DP(Digit DP)を行います.漸化式
dp[i][j][k][l] を,上位 桁目までの数字を決めていて,上位
桁目で数字を自由に選べるかどうかのフラグを
として,現在までに数字を書き込んだかのフラグを
として,今までで '3', '5', '7' を少なくとも1回選んだかどうかのフラグを
としたときの,それを満たす整数の個数と定義します.
の桁数を
としたとき,答えは
dp[s][0][1][7] + dp[s][1][1][7] となります.これは,すべての桁数を決めたときに,数字が書かれており,'3', '5', '7' が少なくとも1回書かれているときの数となります.漸化式はソースコードを参照してください.
計算時間: (
は
の桁数)
まとめ
桁DP はなかなか思考に時間がかかるな.あとパラメータが増えると vector<vector<vector<vector<int>>>> となって険しい.