您的位置:首页 > 其它

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个球的方法

#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种分法.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: