题目大意
对于一个m位的十进制整数
g(x)=∑m−1i=0ai
定义集合
Sn={x|0<g(x)≤n}
给出n,求下面这个式子
n≤1018
分析
一开始看这题的时候不小心把g(x)里的∑看成了∏。囧
剩下的就是数位DP了。
记cntx表示数位和为x的数的个数,
通过枚举当前位选什么,不难写出递推式
lineari=∑9j=110⋅lineari−j+j⋅cnti−j
squarei=∑9j=1100⋅squarei−j+20j⋅lineari−j+j2cnti−j
发现三个状态的转移都只与最近9位有关,将它们压成矩阵,用矩阵快速幂转移即可。
时间复杂度
本文介绍了一道关于数位DP的问题,通过对数位和的统计,利用矩阵快速幂进行高效计算。针对一个给定的数值n,求解特定条件下的数位组合及其平方和。

1507

被折叠的 条评论
为什么被折叠?



