我们可以使用动态规划来解决此问题。下面是详细的思考过程。
定义状态 我们定义一个数组 dp,其中 dp[i] 表示正整数 i 有多少种不同的划分方案。我们的最终目标是求出 dp[n]。
状态转移方程 为了计算 dp[i],我们可以考虑构成整数 i 的划分中,最后一个加数是什么。这个加数可以是 1,2,3,…,i 中的任意一个。
一个正整数n可以表示成若干个正整数之和,形如:n = a1 + a2 + ⋯ + ak,其中a1, a2, …, ak是正整数,且不考虑加数的顺序(即顺序不同但组合相同视为同一种划分)。
这样的表示称为正整数n的一种划分。
现在给定一个正整数n,请求出 n 有多少种不同的划分方案,并输出方案数。
共一行,包含一个整数n。
共一行,包含一个整数,表示总划分数量。
输入:
3
输出:
4
对于n=3,划分方案有:
输入:
4
输出:
8
对于n=4,划分方案有: