Problem: Given two integers ‘n’ and ‘sum’, find count of all n digit numbers with sum of digits as ‘sum’. Leading 0’s are not counted as digits. Print your output % 10^9+7.
#include <stdio.h>
#define MOD 1000000007
unsigned long long dp[101][1001];
unsigned long long Count(int n,int sum)
{
int i;
if(n==0)
{
if(sum==0)
return 1;
return 0;
}
if(dp[n][sum]!=-1)
return dp[n][sum];
unsigned long long res=0;
for(i=0;i<=9;i++)
{
if(sum-i>=0)
res = (res+Count(n-1,sum-i))%MOD;
}
return dp[n][sum]=res;
}
unsigned long long countDigit(int n,int sum)
{
int i;
if(n==0)
{
if(sum==0)
return 1;
return 0;
}
unsigned long long res=0;
for(i=1;i<=9;i++)
{
if(sum-i>=0)
res = (res+Count(n-1,sum-i))%MOD;
}
return res;
}
int main() {
//code
int t,n,sum,i,j;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&sum);
for(i=0;i<=n;i++)
{
for(j=0;j<=sum;j++)
dp[i][j]=-1;
}
int d = countDigit(n,sum);
if(d==0)
d=-1;
printf("%d\n",d);
}
return 0;
}