13-整数划分

整数的划分
相关问题:
有一个桶放了n升水 给了若干个桶 每个桶的容量是n升,每次可以往桶里倒一升或者两升或者整数升 问有多少种倒水的方法?
在这里插入图片描述n是被划分的整数 m是它的加数 它的加数不会超过n
即n=6 而m=8是没有意义的 这个时候m相当于是6 最多就只有六个数相加得到6
对于q(6,6)=1+q(6,5)即除过了6那个式子 然后后面都加上
在这里插入图片描述对于第四个的证明:
在这里插入图片描述代码实现:

int fun(int n, int m)
{
        if (n < 1 || m < 1) return 0;//都等于0的时候没有划分
        if (n == 1 || m == 1)
        {
               return 1;
        }
        if (m > n)
        {
               return fun(n, n);
        }
        if (n == m)
        {
               return 1 + fun(n, n - 1);
        }
        else
               return fun(n - m, m) + fun(n, m - 1);
}
int main()
{
        cout << fun(6, 9) << endl;
        cout << fun(6, 4) << endl;
        cout << fun(6, 6) << endl;
        cout << fun(6, 1) << endl;
        return 0;
}

结果:(6, 9)和(6, 6)就是一样的划分结果
在这里插入图片描述

发布了82 篇原创文章 · 获赞 7 · 访问量 4179

猜你喜欢

转载自blog.csdn.net/sunshine612/article/details/104702807