解题思路
这个问题可以转化为一个动态规划问题。与完全背包问题不同,完全背包中每个物品可以选多次,而本题中每个数字只能选一次(因为要求严格递减),因此更类似于01背包问题。
动态规划方法
定义dp[i][j]表示使用前i个数字(1到i)组成和为j的方案数。状态转移方程为:
- 如果不选数字
i,则方案数为dp[i-1][j]
- 如果选数字
i,则方案数为dp[i-1][j-i](因为每个数字只能选一次)
- 因此
dp[i][j] = dp[i-1][j] + dp[i-1][j-i]
P3627.【动态规划8】整数划分(01背包基础题)
题目描述:
一个正整数 n 可以表示成若干个正整数之和,形如:n = n1 + n2 + … + nk,其中 n1 > n2 > … > nk, k ≥ 1。
我们将这样的一种表示称为正整数 n 的一种划分。
现在给定一个正整数 n,请你求出 n 共有多少种不同的划分方法。
输入
共一行,包含一个整数n。
输出
共一行,包含一个整数,表示总划分数量。
由于答案可能很大,输出结果请对109+7取模。
示例1
输入:
4
输出:
2
提示
示例1一共2种:
4
3+1
示例2
输入:
6
输出:
4
提示
示例2一共4种:
6
5+1
4+2
3+2+1