数的拆分
一个正整数,可以拆分成若干个正整数的和。例如3可以拆成1+1+1,也可以拆成1+2。对于3,只有这2种拆分方法。
请编写程序,给定正整数n,计算其拆分方案数。
输入格式:
一个正整数n, n <= 5000。
输出格式:
拆分方案数。由于这个数字可能非常大,输出其对1000000007取模。
输入样例:
3
输出样例:
2
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int p(int n, int m)
{
if (m == 1 || n == 1)
return 1;
if (n == m)
return p(n, m - 1) + 1;
if (n < m)
return p(n, n);
else
return p(n, m - 1) + p(n - m, m);
}
int main()
{
printf("输入整数n:");
int n;
scanf("%d",&n);
printf("有%d种划分方式", p(n, n));
}
参考
https://blog.csdn.net/burse_liu/article/details/122796122
你题目的解答代码如下:
#include <stdio.h>
long long int count(int n, int m)
{
long long int a = 0;
if (n <= 1 || m <= 1)
{
if (n < 1 || m < 1)
{
a = 0;
}
else if (n == 1 || m == 1)
{
a = 1;
}
}
else
{
if (n < m)
{
a = count(n, n);
}
else
{
if (n == m)
{
a = count(n, m - 1) + 1;
}
else
{
a = count(n - m, m) + count(n, m - 1);
}
}
}
return a;
}
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", count(n, n - 1)%1000000007);
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
采纳就对了
class Solution {
public:
int integerBreak(int n) {
vector<int> dp(n + 1, 0);
for(int i = 2; i <= n; i++) {
int curMax = 0;
for(int j = 1; j < i; j++) {
curMax = max(curMax, max(j * (i - j), j * dp[i - j]));
}
dp[i] = curMax;
}
return dp[n];
}
};