- d , d
.
void calc(int present, int total,int k, int d, bool atleastd)
{
, atleastd
.
if (total == present && atleastd)
{
ans++;
ans = ans%val;
return;
}
else
{
for ( int i = 1; i <= k; i++ )
{
if (present+i <= total)
, , atleastd
, , (i >= d
).
calc(present+i,total,k,d,atleastd || i >= d);
, return
. - , == 1.
}
}
}
, ans
val
, ans
, 0, val
= 1000000007.
, , n <= 15
, n = 100.
n = 100, memoization . .