UVA 10910 Marks Distribution(组合数学 或 递推)
2014-10-15 15:33
351 查看
题意:一个人N门课程的总成绩为T,每门课程的最低成绩为P,求一共有多少种可能的分配方法。
题解:可以先求出超出的部分 T = T - n*p;剩余的相当于n个里面每个科目放0,1分等。
这题我只懂了递推,不懂组合数学,看来太弱了
dp[i][j] = dp[i-1][0] + dp[i-1][1] +......+d[[i-1][j];表示前i个盒子放j个球的方法
组合数学
把T分分成T份放入到n个科目中,相当于把T个球放到n个盘子中,用多少种方法?(求大神解释|隔板法俺不懂啊)
隔板法:
将20个大小形状完全相同的小球放入3个不同的盒子,允许有盒子为空,但球必须放完,有多少种不同的方法?
分析:本题中的小球大小形状完全相同,故这些小球没有区别,问题等价于将小球分成三组,允许有若干组无元素,用隔板法.
解析:将20个小球分成三组需要两块隔板,因为允许有盒子为空,不符合隔板法的原理,那就人为的再加上3个小球,保证每个盒子都至少分到一个小球,那就符合隔板法的要求了(分完后,再在每组中各去掉一个小球,即满足了题设的要求)。然后就变成待分小球总数为23个,球中间有22个空档,需要在这22个空档里加入2个隔板来分隔为3份,共有C(22,2)=231种不同的方法.
点评:对n件相同物品(或名额)分给m个人(或位置),允许若干个人(或位置)为空的问题,可以看成将这n件物品分成m组,允许若干组为空的问题.将n件物品分成m组,需要m-1块隔板,将这n件物品和m-1块隔板排成一排,占n+m-1位置,从这n+m-1个位置中选m-1个位置放隔板,因隔板无差别,故隔板之间无序,是组合问题,故隔板有Cn+m-1 m-1种不同的方法,再将物品放入其余位置,因物品相同无差别,故物品之间无顺序,是组合问题,只有1种放法,根据分步计数原理,共有Cn+m-1 m-1×1=Cn+m-1 m-1种排法
例2:有广西橘子,烟台苹果,莱阳梨若干,从中随意取出四个,问共有多少种不同取法?
问题等价于有四个水果篮,将其分为三组向里面加入不同水果,且允许篮子为空
分为三组需要2个隔板,将水果篮与隔板并排 ,隔板共有4+2个放置位置,故有C(4+2),2个选择,
即15种。[1]
将20个优秀学生名额分给18个班,每班至少1个名额,有多少种不同的分配方法?
分析:本题是名额分配问题,用隔板法.
解析:将20个名额分配给18个班,每班至少1个名额,相当于将20个相同的小球分成18组,每组至少1个,将20个相同的小球分成18组,需要17块隔板,先将20个小球排成一排,因小球相同,故小球之间无顺序,是组合,只有1种排法,再在20个小球之间的19个空档中,选取17个位置放隔板,因隔板无差别,故隔板之间无序,是组合问题,故隔板有C19 17种不同的放法,根据分步计数原理,共有C19 17种不同的方法,因17块隔板将20个小球分成18组,从左到右可以看成每班所得的名额数,每一种隔板与小球的排法对应于一种分法,故有Cm-1
n-1种分法.
题解:可以先求出超出的部分 T = T - n*p;剩余的相当于n个里面每个科目放0,1分等。
这题我只懂了递推,不懂组合数学,看来太弱了
dp[i][j] = dp[i-1][0] + dp[i-1][1] +......+d[[i-1][j];表示前i个盒子放j个球的方法
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef long long LL; LL dp[80][80]; int main(){ int t,n,T,p; cin >> t; while(t--){ cin >> n >> T >> p; T = T - n * p; memset(dp,0,sizeof(dp)); for(int i = 0;i <= n;i++) dp[i][0] = 1; for(int i = 1;i <= n;i++){ for(int j = 1;j <= T;j++){ for(int k = 0;k <= j;k++){ dp[i][j] += dp[i-1][k]; } } } cout << dp [T] << endl; } }
组合数学
把T分分成T份放入到n个科目中,相当于把T个球放到n个盘子中,用多少种方法?(求大神解释|隔板法俺不懂啊)
#include <cstdio> typedef long long LL; LL C(LL n, LL k) { if(n - k < k) k = n - k; LL ans = 1; for(int i = 1; i <= k; i++) ans = ans * (n - i + 1) / i; return ans; } int main() { int cas; LL n, t, p; scanf("%d", &cas); while(cas--) { scanf("%lld%lld%lld", &n, &t, &p); t = t - n * p; LL ans = C(n + t - 1, n - 1); printf("%lld\n", ans); } return 0; }
隔板法:
将20个大小形状完全相同的小球放入3个不同的盒子,允许有盒子为空,但球必须放完,有多少种不同的方法?
分析:本题中的小球大小形状完全相同,故这些小球没有区别,问题等价于将小球分成三组,允许有若干组无元素,用隔板法.
解析:将20个小球分成三组需要两块隔板,因为允许有盒子为空,不符合隔板法的原理,那就人为的再加上3个小球,保证每个盒子都至少分到一个小球,那就符合隔板法的要求了(分完后,再在每组中各去掉一个小球,即满足了题设的要求)。然后就变成待分小球总数为23个,球中间有22个空档,需要在这22个空档里加入2个隔板来分隔为3份,共有C(22,2)=231种不同的方法.
点评:对n件相同物品(或名额)分给m个人(或位置),允许若干个人(或位置)为空的问题,可以看成将这n件物品分成m组,允许若干组为空的问题.将n件物品分成m组,需要m-1块隔板,将这n件物品和m-1块隔板排成一排,占n+m-1位置,从这n+m-1个位置中选m-1个位置放隔板,因隔板无差别,故隔板之间无序,是组合问题,故隔板有Cn+m-1 m-1种不同的方法,再将物品放入其余位置,因物品相同无差别,故物品之间无顺序,是组合问题,只有1种放法,根据分步计数原理,共有Cn+m-1 m-1×1=Cn+m-1 m-1种排法
例2:有广西橘子,烟台苹果,莱阳梨若干,从中随意取出四个,问共有多少种不同取法?
问题等价于有四个水果篮,将其分为三组向里面加入不同水果,且允许篮子为空
分为三组需要2个隔板,将水果篮与隔板并排 ,隔板共有4+2个放置位置,故有C(4+2),2个选择,
即15种。[1]
将20个优秀学生名额分给18个班,每班至少1个名额,有多少种不同的分配方法?
分析:本题是名额分配问题,用隔板法.
解析:将20个名额分配给18个班,每班至少1个名额,相当于将20个相同的小球分成18组,每组至少1个,将20个相同的小球分成18组,需要17块隔板,先将20个小球排成一排,因小球相同,故小球之间无顺序,是组合,只有1种排法,再在20个小球之间的19个空档中,选取17个位置放隔板,因隔板无差别,故隔板之间无序,是组合问题,故隔板有C19 17种不同的放法,根据分步计数原理,共有C19 17种不同的方法,因17块隔板将20个小球分成18组,从左到右可以看成每班所得的名额数,每一种隔板与小球的排法对应于一种分法,故有Cm-1
n-1种分法.
相关文章推荐
- UVA 10910 Marks Distribution(组合数学 或 递推)
- UVA 题目10910 Marks Distribution(组合数学)
- (组合数学3.3.2.2)UVA 10497 - Sweet Child Makes Trouble(特殊的排列问题——错排方案数)
- [HDU1085][HDU1028][HDU2013] 组合数学入门(母函数、递推)
- UVa 10157 Expressions (组合数学&高精度)
- poj1737 Connected Graph(计数,组合数学,递推,高精)
- HDU6143 组合数学 递推
- UVA 19889 组合数学
- UVa 10910 Marks Distribution (可重复组合数)
- POJ-3252-Round Numbers-组合数学-递推
- UVaLIve 2889 | LA 2889 | UVa 12050 - Palindrome Numbers (组合数学)
- UVA 10325 The Lottery (组合数学,容斥原理,二进制枚举)
- (组合数学3.1.1.2)UVA 10098 Generating Fast(使用字典序思想产生所有序列)
- hdu1292 组合数学+递推
- UVA 10609 数学 几何 递推
- UVa 10943 How do you add?(数学递推)
- UVa 10780 - How do you add? (简单DP 组合数学 隔板法)
- 第二章:数学基础(组合计数+递推)
- uva 11609 - Teams(组合数学+快速幂)
- UVA 10375 - Choose and divide(数论)(组合数学)