幸运数字 题解

题目描述

小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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值