• 1.整数划分-递归


    //对于一个正整数n的划分,就是把n变成一系列正整数之和的表达式。注意,分划与顺序无关,例如6=5+1跟6=1+5是
    //同一种分划。另外,单独这个整数本身也算一种分划。
    //例如:对于正整数n=5,可以划分为:
    //1+1+1+1+1
    //1+1+1+2
    //1+1+3
    //1+2+2
    //2+3
    //1+4
    //5
    #include <iostream>
    using namespace std;

    int huafen(int n, int m){
        if(n == 1 || m == 1)
            return 1;
        else if(n > m)
            return huafen(n, m - 1) + huafen(n - m, m); //划分中包含m的情况,即{m, {x1,x2,...xi}}, 其中{x1,x2,... xi} 的和为n-m,因此这情况下为f(n-m,m)
        else if(n < m)
            return  huafen(n, n);
        else if(n == m){
            return 1 + huafen(n, m - 1);
        }
    }
    //http://blog.csdn.net/u013197555/article/details/48436947
    int main(){
        int n;
        cin >> n;
        cout <<    huafen(n, n);
        return 0;
    }

  • 相关阅读:
    华师菜鸟杯2020
    「算法」排序
    生成函数
    多项式乘法逆
    多项式牛顿迭代
    「数学」快速幂
    「算法」贪心
    「组合数学」一:什么是组合数学
    「具体数学」三:整值函数
    「图论」树上问题
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/7279801.html
Copyright © 2020-2023  润新知