Dice Combinations 题解

Dice Combinations 题解

题目描述

https://cses.fi/problemset/task/1633

给定一个目标整数 NN,计算有多少种骰子投掷序列,使得骰子顶面的和为 NN

限制1N1061 \le N \le 10^6


解法

问题类型:完全背包(计数问题,每种骰子点数可用无限次)

定义dp[i] 为掷骰子得到的和为 ii 的所有序列的数量

初始条件dp[0] = 1(和为 0 只有一种方式:什么都不投),当 i<0i < 0 时忽略

状态转移dp[i]=dp[i1]+dp[i2]+dp[i3]+dp[i4]+dp[i5]+dp[i6]dp[i] = dp[i-1] + dp[i-2] + dp[i-3] + dp[i-4] + dp[i-5] + dp[i-6]

解释:考虑最后一个掷出的骰子点数。如果是 1,则前面和为 i1i-1;如果是 2,则前面和为 i2i-2;… 依此类直到 6。将所有可能的情况相加。

代码

MOD = 10**9 + 7
n = int(input())
dp = [1]

for i in range(n):
    total = sum(dp[-6:])
    dp.append(total % MOD)

print(dp[-1])

时间复杂度:O(N) 空间复杂度:O(N)


Dice Combinations 题解
https://mingsm17518.github.io/2026/04/30/算法学习/05_Gold/02_动态规划/完全背包/01_Dice_Combinations/
作者
Ming
发布于
2026年4月30日
更新于
2026年9月13日
许可协议