可重复选择的组合-vijos1060 盒子
来源:互联网 发布:电子教室软件免费版 编辑:程序博客网 时间:2024/06/03 04:41
描述
N个盒子排成一行(1<=N<=20)。你有A个红球和B个蓝球。0 <= A <= 15, 0 <= B <= 15。球除了颜色没有任何区别。你可以将球放进盒子。一个盒子可以同时放进两种球,也可以只放一种,也可以空着。球不必全部放入盒子中。编程计算有多少种放置球的方法。
格式
输入格式
一行,N,A,B,用空格分开。
输出格式
一行,输出放置方案总数。
样例1
样例输入1
2 1 1
Copy
样例输出1
9
Copy
限制
1s
来源
Ural
Xiaomengxian
可以先只考虑一种球 因为可以一个盒子都不放,我们把这种情况看成是在旁边多加一个盒子,把所有球放进去
上网查了些资料 这是组合数学中的球盒模型
属于有关重复元素的组合问题
没学过 在这里整理一下
首先是重复元素的排列
运用到的是分步计数原理
1.一般地,从n个元素中取出m个可以重复的元素组成排列,第一个元素有n种取法,第二个元素也有n种取法……一共的排列数为
比如,用1~9这10个数,可以组成
2.对于此题,球是重复的,但并非只有一种,这里相当于n个不同元素 选A个出来 乘上n个不同元素 选B个 可以重复选择的方案数,此外,还可以不选,就想当于n个箱子排成一排,外面再多放一个箱子,不放球的时候全部仍到那个箱子里,故一共为C(A+n,n)*C(B+n,n)
#include <bits/stdc++.h>using namespace std;typedef unsigned long long ull;ull c[50][50];int main(){ int n,a,b; for(int i=0;i<=40;i++) c[i][0]=1; for(int i=0;i<=40;i++){ for(int j=1;j<=i;j++) c[i][j]=c[i-1][j-1]+c[i-1][j]; } cin>>n>>a>>b; cout<<c[a+n][n]*c[b+n][n]<<endl;}
阅读全文
0 0
- 可重复选择的组合-vijos1060 盒子
- Vijos1060. 盒子
- 【递推】【vijos1060】盒子
- 可重复组合公式的证明
- 可重复组合的应用 By ACReaper
- 可重复组合
- Cpp环境【Vijos1060】斯特林数:盒子与球
- 输出所有的字符组合(可重复)
- 全组合(可包含重复字符)
- 全组合(可包含重复字符)
- 重复数字的组合
- 球和盒子的组合数学问题
- Knapsack 问题(可重复选择)
- C语言实现全排列(部分算法参考网友,可实现重复字符的组合)
- Saving Beans HDU3037 ( 可重复的组合数计数原理+Lucas定理 )
- 可控制的CSS3D盒子动画
- lua实现字母可重复组合有多少种(不可重复的看前面文章排列组合)
- vijos1060 盒子(重庆一中高2018级信息学竞赛测验7) 解题报告
- python函数式编程
- centos安装youcompleteme
- Samba
- hello!everone
- Redis
- 可重复选择的组合-vijos1060 盒子
- 关于Apache/Tomcat/JBOSS/Neginx/lighttpd/Jetty等一些常见服务器的区别比较和理解
- java方法参数基本类型和方法参数是引用类型的区别
- 工作日常--javascript各种事件总结
- pip安装使用详解
- 计算机网络基础知识
- LeetCode算法题——Total Hamming Distance
- GitHub--重装系统后关联以前的GitHub
- CentOS安装Gitblit