博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 10910 Marks Distribution(组合数学 或 递推)
阅读量:4286 次
发布时间:2019-05-27

本文共 2249 字,大约阅读时间需要 7 分钟。

题意:一个人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个球的方法

#include
#include
#include
#include
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[n][T] << endl; }}
组合数学

把T分分成T份放入到n个科目中,相当于把T个球放到n个盘子中,用多少种方法?(求大神解释|隔板法俺不懂啊)

#include 
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种分法.

转载地址:http://xdsgi.baihongyu.com/

你可能感兴趣的文章
Android系统组件之Activity的生命周期
查看>>
JavaScript利用URL向后台传入中文参数乱码问题解决之道!
查看>>
网页布局框架之Iframe
查看>>
Tomcat发布多个项目抛出异常
查看>>
Hibernate坑爹之实体类与数据库字段
查看>>
SpringMvc前端提交多个对象,后台接收
查看>>
关于Request
查看>>
AJAX——核心XMLHttpRequest对象
查看>>
Java处理js输入特殊字符(如“+、@、¥”)
查看>>
Mysql注释
查看>>
MySQL(root用户)密码重置
查看>>
grant授权
查看>>
MySQL创建用户与授权方法
查看>>
MySql数据类型
查看>>
MySql简单sql使用
查看>>
"未能加载文件或程序集“MySql.Data, Version=6.9.3.0”或它的某一个依赖项。
查看>>
CodeFirst for MySql
查看>>
Code Frist for Mysql 实例
查看>>
Visual Studio 开源控件扩展 NuGet 常用命令及常用组件
查看>>
mysql局域网访问设置
查看>>