整数划分问题
Description
用一系列正整数之和的表达式来表示一个正整数,称为整数的划分,例如6可以划分为:
6
5+1
4+2,4+1+1
3+3,3+2+1,3+1+1+1
2+2+2,2+2+1+1, 2+1+1+1+1
1+1+1+1+1+1
总共11种。
本题需要输入正整数n和划分的表达式最大时m。输出对应的划分个数f(n,m)。例如上面所述
f(6,1)=1
f(6,2)=4
f(6,3)=7
f(6,4)=9
f(6,5)=10
f(6,6)=11
Input
输入正整数n和m用空格分开,n表示要划分的正整数,m是要划分的最大表达式个数
Output
输出满足条件的方案总个数
Sample Input 1
6 6
Sample Output 1
11
Sample Input 2
6 2
Sample Output 2
4
Hint
Description
用一系列正整数之和的表达式来表示一个正整数,称为整数的划分,例如6可以划分为:
6
5+1
4+2,4+1+1
3+3,3+2+1,3+1+1+1
2+2+2,2+2+1+1, 2+1+1+1+1
1+1+1+1+1+1
总共11种。
本题需要输入正整数n和划分的表达式最大时m。输出对应的划分个数f(n,m)。例如上面所述
f(6,1)=1
f(6,2)=4
f(6,3)=7
f(6,4)=9
f(6,5)=10
f(6,6)=11
Input
输入正整数n和m用空格分开,n表示要划分的正整数,m是要划分的最大表达式个数
Output
输出满足条件的方案总个数
Sample Input 1
6 6
Sample Output 1
11
Sample Input 2
6 2
Sample Output 2
4
Hint
Description
用一系列正整数之和的表达式来表示一个正整数,称为整数的划分,例如6可以划分为:
6
5+1
4+2,4+1+1
3+3,3+2+1,3+1+1+1
2+2+2,2+2+1+1, 2+1+1+1+1
1+1+1+1+1+1
总共11种。
本题需要输入正整数n和划分的表达式最大时m。输出对应的划分个数f(n,m)。例如上面所述
f(6,1)=1
f(6,2)=4
f(6,3)=7
f(6,4)=9
f(6,5)=10
f(6,6)=11
Input
输入正整数n和m用空格分开,n表示要划分的正整数,m是要划分的最大表达式个数
Output
输出满足条件的方案总个数
Sample Input 1
6 6
Sample Output 1
11
Sample Input 2
6 2
Sample Output 2
4
Hint
1<=m<n<100
#include<iostream>
using namespace std;
int split(int n,int m)
{
if(n==1||m==1)
return 1;
else if (n<m)
return split(n,n);
else if(n==m)
return split(n,n-1)+1;
else
return split(n,m-1)+split(n-m,m);
}
int main()
{
int n,m;
cin>>n;
cin>>m;
cout<<split(n,m);
return 0;
}