zoukankan      html  css  js  c++  java
  • 整数的拆分

    整数拆分分为有序拆分和无序拆分;

    有序拆分: 把n拆分为 r个数,就相当于把n个球用 r-1块隔板插入到n-1个空隙里  C(r-1,n-1);  放球模型,把n个无区别的球放入到r个有区别的盒子里,每个盒子至少一个。

    无序拆分: 把n拆分为 r个数,把n个相同的球放入到r个相同的盒子里,允许盒子为空。

    把n个相同的球放入到r个不同的盒子里,允许盒子为空,我们可以用x1+x2+x3+...+xr=n 表示 xi为非负整数  C(k-1+r,r)   去掉盒子编号  C(k-1+r,r)/r!

    假设把n拆成  1、2、3、4 的和,输出拆分数

    #include<iostream>
    using namespace std;
    int main(){
        int n;               //要拆分的数
        int c[100],c1[100];
        while(cin>>n){
            if(n<0)  break;
            memset(c,0,sizeof(c));
            memset(c1,0,sizeof(c1));
            for(int i=0;i<=n;i++){     //
                c[i]=1;
            }
            for(int i=2;i<=4;i++){
                for(int j=0;j<=n;j++)
                    for(int k=0;k+j<=n&&k<=n;k+=i)
                        c1[k+j]+=c[j];
                for(int j=0;j<=n;j++){
                    c[j]=c1[j];
                    c1[j]=0;
                }
            }
            cout<<c[n]<<endl;
    
        }
        return 0;
    }
  • 相关阅读:
    进程同步和死锁;事务、悲观锁、乐观锁、表锁、行锁
    快速排序
    oracle索引分类
    数据结构
    MySQL视图
    sql优化的方法
    MySQL索引
    转:关于ROWNUM的使用
    转载:mybatis踩坑之——foreach循环嵌套if判断
    Spring 注意事项
  • 原文地址:https://www.cnblogs.com/wintersong/p/4930700.html
Copyright © 2011-2022 走看看