问题描述
小蓝是工厂里的安全工程师,他负责安放工厂里的危险品
工厂是一条直线,直线上有n个空位,小蓝需要将若干个油桶放置在n个空位上,每2个油桶中间至少需要个空位隔开,现在小蓝想知道有多少种放置油桶的方案,你可以编写-个程序帮助他吗?
由于这个结果很大,你的输出结果需要对109+7取模
输入格式
第一行包含两个正整数n,k,分别表示n个空位与个隔开的空位。
输出格式
输出共1行,包含1个整数,表示放置的方案数对 109+7取模。
import os
import sys
# 请在此输入您的代码
"""
dp[i]:第i个空位得方案数
第i个空位,要么发,要么不放
放:从dp[i-k-1]转移
不放:从dp[i-1]转移过来
"""
mod=1000000007
n,k=map(int,input().split())
dp=[0]*(n+1)
#0个空位也是一种放案
dp[0]=1
for i in range(1,n+1):
if i-k-1>=0:
#第i个空位,放的方案+不放的方案
dp[i]=(dp[i-k-1]+dp[i-1])%mod
else:
#上面0个空位方案+不放的方案
dp[i]=(1+dp[i-1])%mod
print(dp[n])