uva10943(隔板法)

很裸的隔板法。

引用一下维基上对隔板法的解释:

现在有10个球,要放进3个盒子里

●●●●●●●●●●

隔2个板子,把10个球被隔开成3个部份

●|●|●●●●●●●●、●|●●|●●●●●●●、●|●●●|●●●●●●、●|●●●●|●●●●●、●|●●●●●|●●●●、●|●●●●●●|●●●、......

如此类推,10个球放进3个盒子的方法总数为

n个球放进k个盒子的方法总数为

问题等价于求的可行解数,其中正整数

**如果允许有空盒子**:

现在有10个球,要放进3个盒子里,并允许空盒子。考虑10+3个球的情况:

●|●|●●●●●●●●●●●

从3个盒子里各拿走一个,得到一种情况,如此类推:

||●●●●●●●●●●、|●|●●●●●●●●●、|●●|●●●●●●●●、|●●●|●●●●●●●、|●●●●|●●●●●●、......

n个球放进k个盒子的方法总数(允许空盒子)为[2]

问题等价于求的可行解数,其中非负整数

也是展开式的项数,这是因为展开后每一项肯定是a1^x1*a2^x2*......*ak^xk,而且x1+x2+...+xk=n.那就转化为上面那个问题了。

另一种变形:

减少球数用隔板法   

将20个相同的小球放入编号分别为1,2,3,4的四个盒子中,要求每个盒子中的球数不少于它的编号数,求放法总数。  

分析:先在编号1,2,3,4的四个盒子内分别放0,1,2,3个球,剩下14个无区别的球,问题等价于将14个球放入4个编号为1,2,3,4的四个盒子里,每个盒子至少有一个球的问题。

剩下14个无区别的球排成一列,共形成13个空,可以理解为有3块隔板,将排成一列的球隔成4段,每段至少1个,有C3/13=286(种)。 

如果不用隔板法,亦可以递推来做:

按最后一个加上的数是几来分类,ans[n][k]=ans[n-1][k]+ans[n][k-1].其中ans[n][k-1]是最后一个加0,ans[n-1][k]是最后一位加的不是0.

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std;
#define INF 1000000000
#define eps 1e-8
#define pii pair<int,int>
#define LL long long int
const int mod=1000000;
int n,k,ans,c[250][250];
int main()
{
    //freopen("in6.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    c[0][0]=1;
    for(int i=1;i<=200;i++)
    {
        c[i][0]=c[i][i]=1;
        for(int j=1;j<i;j++)
        {
            c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
        }
    }
    while(scanf("%d%d",&n,&k)==2)
    {
        if(n==0&&k==0) break;
        else
        {
            printf("%d\n",c[n+k-1][k-1]);
        }
    }
    //fclose(stdin);
    //fclose(stdout);
    return 0;
}

  

时间: 2024-10-05 06:14:48

uva10943(隔板法)的相关文章

BZOJ 3028: 食物 [生成函数 隔板法 | 广义二项式定理]

3028: 食物 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 497  Solved: 331[Submit][Status][Discuss] Description 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险! 我们暂且不讨论他有多么NC,他又幻想了他应该带一些什么东西.理所当然的,你当然要帮他计算携带N件物品的方案数. 他这次又准备带一些受欢迎的食物,如:蜜桃多啦,鸡块啦,承德汉堡等等 当然,他又有一些稀奇古怪的限制: 每种

10943 - How do you add?(隔板法)

这个问题可以简化成在把N个球放在K个箱子里的方法个数,由于每个箱子可以是空的,所以我们不妨多加K个球,这样就可以至少保证一个箱子有一个球,之后用隔板法对N + K 个球进行分割,也就是在N + K - 1 个空位中选择K - 1位置 C(N + K - 1,K - 1) 求解方法递推就可以了. 另外: 排列数 A(m,n)=m(m-1)(m-2)--(m-n+1)= m!/(m-n)! 而组合数 C(m,n)=A(m,n)/n! C(m,0) = 1; 0! = 1; 代码: #include<

组队赛第五场 组合隔板法+最小生成树预处理并查集

UVALive 6434 题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4445 这题正好就是大一小学期的时候好像是曦曦出的那个牛那题吧,就是要买多少块板然后正好把牛给拦完.这题也是一样,就是找最大的距离,当做隔板,依次把最大的距离去掉,最后的就是最小的了. #include<iostream> #in

51Nod 1509 加长棒(隔板法)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1509 思路: 直接去解可行的方法有点麻烦,所以应该用总的方法去减去不可行的方法,有点像容斥原理. 将加长棒分成4个部分,允许为0,其中一部分表示剩余.这个就是经典的隔板法了. 这是百度百科上的一个例子,看完之后应该就理解隔板法的做法了吧. 这道题目也就是要将L分成4部分,允许为空,所以先L+4,表示每个部分至少为1,所以总共有L+4-1的空隙可以插板,我们需要插3个板,

UVA10943- How do you add?(隔板法)

题目链接 题意:求由K个不大于N的非负整数组合而成N的方法数. 思路:隔板法.这个问题可以等价于有N个小球放入K个盒子中,盒子可以为空,问有几种放置的方法.但因为盒子为空,不符合隔板法,所以我们可以先往每个盒子里面放置一个小球,满足每个盒子都不为空的,等分完后,在每个盒子减去一个小球.所以就相当与将N + K - 1个小球分为K - 1份.之后就是组合数学的问题了. 代码: #include <iostream> #include <cstdio> #include <cst

组合计数中的隔板法 HDU 1410 PK武林盟主

在排列组合中,对于将不可分辨的球装入到可以分辨的盒子中而求装入方法数的问题,常用隔板法.隔板法在排列组合中的应用技巧 例1.求方程的正整数解的个数. [分析] 将10个球排成一排,球与球之间形成9个空隙,将两个隔板插入这些空隙中(每空至多插一块隔板),规定由隔板分成的左.中.右三部分的球数分别为x.y.z之值(如下图).则隔法与解的个数之间建立了一一对立关系,故解的个数为(个).实际运用隔板法解题时,在确定球数.如何插隔板等问题上形成了一些技巧.下面举例说明. 技巧一:添加球数用隔板法. 例2.

无标号树的计数原理(组合计数,背包问题,隔板法,树的重心)

闲话 一个计数问题入门级选手来搞这种东西 最初的动力来自高一化学课有机物(滑稽).<同步导练>出了个这样的选择题. 一个结构极其庞大的烷烃(二十几个碳原子),求它的主链长度. 这不是个求树的直径的裸题么?!OI选手扫两眼就出来了,然而别的同学费劲心思找完了还是错的. 于是第一次在常规课中体验到作为OIer的优越感...... 又是一节课,芙蓉姐开始要我们画己烷.庚烷的同分异构体?! 这不是等于要求节点数为\(n\),点度数不超过\(4\)的无标号的无根树个数吗?没见过,但还是有一点DP思想,蒟

“隔板法”详解

理解隔板法 隔板法就是在n个元素间的(n-1)个空插入k-1个板子,把n个元素分成k组的方法. 应用隔板法必须满足的3个条件: n个元素是相同的 k个组是互异的 每组至少分得一个元素 公式 将n个相同的求放到m个不同的盒子里的个数为:$C_{n-1}^{m-1}$ 例如, 原文地址:https://www.cnblogs.com/lfri/p/10439510.html

HDU 3037 Saving Beans (隔板法+Lucas定理)

<题目链接> 题目大意:用$n$颗树保存不超过$m$颗豆子($n,m\leq10^9$)(不一定所有的树都有豆子保存),问你总共有多少种情况.答案对p取模(p保证是个素数). 解题分析:可以转化成 将$n$个相同的球放入$m$个集合中,有的集合中的球数可能为0的等价问题.很明显这可以用隔板法解决,答案为$C(n+m-1,m-1)$则题目解的个数可以转换成求: $C(n+m-1,0)+C(n+m-1,1)+C(n+m-1,2)+……+C(n+m-1,m-1)$ 利用组合数公式 $C(n,k) =