zoukankan      html  css  js  c++  java
  • 小球和箱子

    /*
    将n个不同的球放入m个不同的盒子的方案数
    m^n 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,m,a[1010],l;
    int main()
    {
        scanf("%d%d",&n,&m);
        int k=m;
        while(k)
          {
              a[++l]=k%10;
              k=k/10;
          }
        for(int i=2;i<=n;i++)
          {
              for(int j=1;j<=l;j++)a[j]=a[j]*m;
              for(int j=1;j<=l;j++)
                if(a[j]>9)
                  {
                    a[j+1]+=a[j]/10;
                    a[j]=a[j]%10;
                }
            if(a[l+1])l++;
          }
        for(int i=l;i>=1;i--)
          printf("%d",a[i]);
        return 0;
    }
    /*
    将n个相同的球放入m个不同的盒子的方案数
    x1+x2+...+xm=n
    都加1 x1+x2+...+xm+m=n+m 每个解不为0 
    直接隔板法 C(m-1,m+n-1) 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,m;
    int main()
    {
        scanf("%d%d",&n,&m);
        int p=m-1;
        int q=m+n-1;
        int sum=1,div=1;
        for(int i=q;i>=q-p+1;i--)
          sum*=i;
        for(int i=1;i<=p;i++)
          div*=i;
        printf("%d
    ",sum/div);
        return 0;
    }
    /*
    将n个相同的球放入m个相同的盒子的方案数
    f[i][j]=f[i][j-i]+f[i-1][j];
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int T,n,m,f[100][100];
    int Dfs(int k,int p)
    {
        if(k==0||p==1)return 1;
        if(f[k][p])return f[k][p];
        if(p>k)return Dfs(k,k);
        return Dfs(k,p-1)+Dfs(k-p,p);
    }
    int main()
    {
        scanf("%d",&T);
        while(T--)
          {
              memset(f,0,sizeof(f));
              scanf("%d%d",&n,&m);
            printf("%d
    ",Dfs(n,m));
          }
        return 0;
    }
    /*
    将n个不同的球放入m个相同箱子里的方案数 
    F[i][j]=f[i-1][j-1]+f[i-1][j]*j;
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,m,f[100][100];
    int main()
    {
        scanf("%d%d",&n,&m);
        f[0][0]=1;
        for(int i=1;i<=n;i++)
          for(int j=1;j<=i&&j<=m;j++)
            f[i][j]=f[i-1][j-1]+f[i-1][j]*j;
        printf("%d
    ",f[n][m]);
        return 0;
    }
  • 相关阅读:
    (8)FastDFS
    (7)文件上传
    (6)品牌新增
    数据仓库_MySQL(2)
    数据仓库_Linux(5)&MySQL(1)
    J哥说生产事故之僵尸进程
    J哥说生产事故之CPU爆表
    idea classpath
    (五)返回两个数组之间的差异
    (四)数组扁平化
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5514934.html
Copyright © 2011-2022 走看看