• 整数的拆分


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

    有序拆分: 把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;
    }
  • 相关阅读:
    webIDE 第二篇博文
    前端第一天
    记昨天
    入职第四天
    入职第二天
    linux常用命令,自己总结
    一切从头开始
    在服务器上搭建SVN
    Dynamic CRM 365学习历程--JS
    Dynamic CRM 365学习历程--有关CRM的学习过程种需要注意的事项
  • 原文地址:https://www.cnblogs.com/wintersong/p/4930700.html
Copyright © 2020-2023  润新知