Dice Combinations 题解

Dice Combinations 题解

题目描述

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

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

限制:$1 \le N \le 10^6$


解法

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

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

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

状态转移

解释:考虑最后一个掷出的骰子点数。如果是 1,则前面和为 $i-1$;如果是 2,则前面和为 $i-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/08/algorithm/03_Gold/02_动态规划/完全背包/01_Dice_Combinations/
作者
Ming
发布于
2026年4月8日
更新于
2026年4月8日
许可协议