题目中的那个大数一定是若干个1+若干个2+若干个3...+若干个9组成的,显然可以转化成9个\(\underbrace {111...1}_{a_i个1}(0\le a_1\le a_2\le a_3...\le a_9,a_9=n)\)之和
然后模数只有500,所以可以考虑处理出所有\(\mod p =i\)的不同长度的\(111...1\)个数记为\(cnt_i\),考虑dp求答案,设\(f_{i,j,k}\)表示考虑了前\(i\)个剩余类,用了\(j\)个\(111...1\),得到的数\(\mod p =k\)的方案.注意选出来的\(111...1\)不同当且仅当对应的\(a\)序列排序后不同,并且只有模\(p\)相同的\(111...1\)才有可能有影响.转移枚举当前这个类选了多少个j,然后转移系数就是\(cnt_i\)种数中选\(j\)个的方案,这个就等于\(\binom{j+cnt_i-1}{j}\),最后答案为\(f_{p-1,8,p-(\underbrace {111...1}_{n个1}\mod p)}\),因为没有前导0,要至少包含一个\(\underbrace {111...1}_{n个1}\)
原文地址:https://www.cnblogs.com/smyjr/p/11318054.html
时间: 2024-11-09 05:11:54