整数划分问题

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;
}

 

posted @ 2022-11-17 22:23  黎明之花  阅读(70)  评论(0编辑  收藏  举报