题解思路:
首先这此题是不准出现前导0和连续俩个位为0;
也就是 如果是101进制,表示(100)10是(100)100 是有效的;
首先dp[i]表示第i位有多少个有效数字;
若i-1位为0 有效的数字 dp[i-2]*(k-1);
若i-1位不为0 有效的数字 dp[i-1]*(k-1);
所以 dp[i][j]=(dp[i-2]+dp[i-1])*(k-1);
数据非常大 2 ≤ N, K, M ≤ 10^18. 用矩阵优化;
构造矩阵
0 1 dp[0];
k-1 k-1 dp[1];
还是数据的原因,10^18*10^18 会爆ll; 要用快速乘
#include #include #include #include #include #include #include #include