题解:蓝桥云课 3423 安全序列

【题目来源】

蓝桥云课:1.安全序列 - 蓝桥云课 (lanqiao.cn)

【题目描述】

小蓝是工厂里的安全工程师,他负责安放工厂里的危险品。

工厂是一条直线,直线上有 \(n\) 个空位,小蓝需要将若干个油桶放置在 \(n\) 个空位上,每 \(2\) 个油桶中间至少需要 \(k\) 个空位隔开,现在小蓝想知道有多少种放置油桶的方案,你可以编写一个程序帮助他吗?

由于这个结果很大,你的输出结果需要对 \(10^9+7\) 取模。

【输入】

第一行包含两个正整数 \(n,k\),分别表示 \(n\) 个空位与 \(k\) 个隔开的空位。

【输出】

输出共 \(1\) 行,包含 \(1\) 个整数,表示放置的方案数对 \(10^9+7\) 取模。

【输入样例】

4 2

【输出样例】

6

【算法标签】

《蓝桥云课 3423 安全序列》 #思维# #动态规划#

【代码详解】

MOD = 1000000007
n, k = map(int, input().split())
dp = [0]*(n+1)

#初始状态:不放置也为一种方案
dp[0] = 1
for i in range(1, n+1):
  if i-k-1>=0:
    #i>=k-1: dp[i-1]:不放置;dp[i-k-1]放置
    dp[i] = (dp[i-1]+dp[i-k-1]) % MOD
  else:
    #i<k-1: dp[i-1]:不放置;1 放置
    dp[i] = (dp[i-1]+1) % MOD
print(dp[n])

【运行结果】

4 2
6
posted @ 2026-03-04 15:24  团爸讲算法  阅读(4)  评论(0)    收藏  举报