您的位置:首页 > 其它

整数划分问题

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

设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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: