概述
3 = 1 + 1 +1
3 = 2 + 1
3 = 3
则q(n,m)表示n的划分中最大值不超过m的方案书,q(3,3)=3.
【题解】
q(n,m)=q(n-m,m)+q(n,m-1);//放一个m在开头+不放m在开头然后尝试<=m-1
q(0,m)=1; ①
n<0 || m<=0 ->f(n,m)=0 ②
①在②前。
【代码】
#include <cstdio>
#define ll long long
using namespace std;
//计算n的划分个数,其中最大数不超过m
ll q(int n,int m){
if (n==0) return 1;//0的划分只有一个,那就是它本身
if (n<0 || m<=0) return 0;
if (n<m) return q(n,n);
return q(n-m,m) + q(n,m-1); //放一个m在开头+不放m了
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
printf("%lldn",q(n,m));
return 0;
}
最后
以上就是不安水壶为你收集整理的【例题2-5】整数的划分的全部内容,希望文章能够帮你解决【例题2-5】整数的划分所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复