問題. 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>>>>
となって険しい.