zoukankan      html  css  js  c++  java
  • vijos1060 隔板法

    排列组合问题

    之前没有学过隔板法,随便学习了一下

    其实挺好理解的

    附上题解:

    先只考虑一种球:
    因为有n个盒子每个盒子可以放任意多球,还可以空出来任意多球。所以可以考虑为n+1个盒子,最后一个盒子里面是题中没放的球。
    由于盒子可以空出来,所以将隔板与球一起排列 即在隔板和球组成的n+a列中 选出任意a个位置放隔板的话,就可以实现题目要求的效果!(0个或任意多个)。
    两种球所以C(n+a,a)*C(n+b,b)。

     之后还需要注意精度问题

    一直不是很注意这种事情,mark

    最后一个点需要用到 unsigned long long

    附上丑丑的代码:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    int n,m,a,b; 
    double sum1,sum2;
    unsigned long long c;
    int main(){
    	scanf("%d%d%d",&n,&a,&b);
    	sum1=1;
    	for(int i=1+n;i<=a+n;i++){
    		sum1=(sum1*i)/(i-n);
    	}
    	sum2=1;
    	for(int i=n+1;i<=b+n;i++){
    		sum2=(sum2*i)/(i-n);
        }
        c=sum1*sum2;
        cout<<c;
    	return 0;
    }
    

     哦...顺便提一下,自己之前写排列组合的时候,有时候会脑抽把它看成分子分母的乘积再相除

    = =发现有bug...勿闹

  • 相关阅读:
    使用RabbitMq
    创建.NET core的守护进程
    nginx配置
    让.net core 支持静态文件
    关于sql中如何动态加WHERE条件
    CentOS上部署.net core
    chrom中 background 调用pop.js
    windows下安装redis
    sql server导出大批量数据
    python爬虫笔记
  • 原文地址:https://www.cnblogs.com/polebug/p/3947135.html
Copyright © 2011-2022 走看看