codeforces401D Roman and Numbers(数位、状压dp)
题目大意:给n和m,求有多少方案,使得重新排列n的数位后能整除m,不能有前导0(n<01e18,m<0100)思路:数位dp从高位到低位进行dp,dp[s][k]表示当前集合s(现在选了那几个数)模m后的余数为k的方案数时间复杂度O(18*(2^18))核心转移方程,dp[now][(上次余数*10+a[i])%m] += dp[pre][上次余数]不过这样算会算重复,比如n=111,可以从101,011,110转移过来,所以最后要除以num[i]! (i出现的次数,