整数划分问题

来源:互联网 发布:fliqlo mac 编辑:程序博客网 时间:2024/06/05 15:50

为求不同的划分,则将划分的元素按照从大到小排序(全局序约束去除了对称性带来的重复)

设n的最大加数<=m的划分数为q(n,m)

1、q(n,1)=1

2、q(n,m)=q(n,n),m>n

3、q(n,n)=q(n,n-1)+1

4、q(n,m)=q(n,m-1)+q(n-m,m)

对于4的解释:

a。划分中包含m的情况,即{m,{x1,x2,...,xi}},其中{x1,x2,...,xi}和为n-m,因此在这种情况下为f(n-m,m)

b。划分中不包含m的情况,则划分中所有值都比m小,即n的(m-1)划分,个数为f(n,m-1)


#include<iostream>using namespace std;int q(int n, int m){if ((n < 1) || (m < 1))return 1;if ((n == 1) || (m == 1))return 1;if (n < m)return q(n, n);if (n == m)return q(n, m - 1) + 1;return q(n, m - 1) + q(n - m, m);}int main(){int n, m;cin >> n;cin >> m;cout << q(n, m);system("pause");}

原创粉丝点击