题目描述
小y是一个非常喜欢数码的同学,小z是一个特别喜欢取余操作的同学,有一天他们决定一起玩一个游戏来决定谁更加幸运。
小y说我决定幸运的数字它的数码中不应该含有 0,并且它的数码和应该等于 y。
例如 y=4 的时候,112、4、22 等的数码和为 4,对于小y来说就是幸运数字,但是 40 虽然数码和为 4,但是含有 0 就不是 y 的幸运数字
小z说我决定幸运数字应该是对 z 取余等于 0 的。 例如 z=2 的时候 2 的倍数 0,2,4,6,8 等就是小 z 的幸运数字。
于是他们叫来了他们的数学老师Kumb,希望他能够统计出同时满足他们两个人条件的幸运数字有多少。
幸运数的个数可能很大,请你对 1000000007 取模
输入描述
第一行 两个数一个 y,一个 z。
输出描述
输出一行,含有一个整数 输出同时满足两个条件的幸运数的个数。
样例1
输入
4 2
输出
3
说明
幸运数有 112 22 4
数据范围
前 20% 数据 y<=10,0<z≤10
前 100% 数据 y≤50000,0<z≤500
代码
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int y,z,f[50001][500];
int main()
{
scanf("%d%d",&y,&z);
f[0][0]=1;
for(int i=0;i<=y;i++)
{
for(int j=0;j<z;j++)
{
for(int k=1;k<=9;k++)
{
f[i+k][((j<<3)+(j<<1)+k)%z]=(f[i+k][((j<<3)+(j<<1)+k)%z]+f[i][j])%mod;
}
}
}
printf("%d\n",f[y][0]);
return 0;
}
//code by KEOI.