zoukankan      html  css  js  c++  java
  • 51nod 1119 机器人走方格 V2 【组合数学】

    挺水的但是我好久没写组合数了…
    用这样一个思想,在1~m列中,考虑每一列上升几格,相当于把n-1个苹果放进m个篮子里,可以为空,问有几种方案。
    这个就是一个组合数学经典问题了,考虑n个苹果放进m个篮子里,不可以为空的情况,用插板法,也就是把m-1个板子插进排成一排的果子里,分成m个不为空的区间,方案数为( C_{n-1}^{m-1} ),现在考虑n个苹果放进m个篮子里,可以为空的情况,可以想成每个篮子里事先都放了一个苹果,那么就转为了上一个问题,方案数为( C_{n+m-1}^{m-1} )
    回到这道题上,答案就是( C_{n+m-2}^{m-1} )

    #include<iostream>
    #include<iostream>
    using namespace std;
    const int mod=1e9+7,N=1000005;
    long long n,m,inv[N],ans=1;
    long long ksm(long long a,long long b)
    {
    	long long r=1ll;
    	while(b)
    	{
    		if(b&1)
    			r=r*a%mod;
    		a=a*a%mod;
    		b>>=1;
    	}
    	return r;
    }
    int main()
    {
    	scanf("%lld%lld",&n,&m);
    	for(int i=1;i<=n+m-2;i++)
    		ans=ans*i%mod;
    	for(int i=1;i<=n-1;i++)
    		ans=ans*ksm(i,mod-2)%mod;
    	for(int i=1;i<=m-1;i++)
    		ans=ans*ksm(i,mod-2)%mod;
    	printf("%lld
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    十日冲刺第一次会议任务领取详解
    Android studio新建class文件报错
    代码整洁之道阅读笔记03
    本周学习进度条6
    echarts基本用法
    梦断代码阅读笔记01
    软件工程小组任务
    本周学习进度条5
    eclipse界面设置和常用技巧
    团队项目——TD课程通
  • 原文地址:https://www.cnblogs.com/lokiii/p/8336591.html
Copyright © 2011-2022 走看看