poj 1322 Chocolate (生成函数||概率DP)
来源:互联网 发布:知乎电子书 kindle 编辑:程序博客网 时间:2024/05/17 11:34
题目描述
传送门
题目大意:一个口袋中装有巧克力,巧克力的颜色有c种。现从口袋中取出一个巧克力,若取出的
巧克力与桌上已有巧克力颜色相同,则将两个巧克力都取走,否则将取出的巧克力放在桌上。
设从口袋中取出每种颜色的巧克力的概率均等。求取出 n 个巧克力后桌面上剩余 m 个巧克
力的概率。
题解
首先m的个数一定小于等于c,因为如果某种颜色的巧克力数量是大于等于2,那么一定会两个一对被取走,也就是最后剩下的每种巧克力要么只有一个要么没有。如果(n-m)%2!=0,或者m>n,m>n,那么概率一定为0.
那么这个问题其实就可以用概率与期望DP来解决。
令
但是这样做的时间复杂度太高了,那么有没有更高效的方法呢?其实是有的,那就是生成函数。
鉴于这是第一道生成函数的题,所以接下来先说明一些生成函数的预备知识。
指数型生成函数一般用来解决排列问题.定义一个序列{ai}的生成函数为
指数型生成函数的常见形式
(1)序列<1,1,1,….,1>
(2)序列<1,-1,1,-1,….> 的指数型生成函数闭形式为
(3)序列<1,0,1,0,1,….> 的指数型生成函数闭形式为
(4)序列<0,1,0,1,0….> 的指数型生成函数闭形式为
(5)设序列
(6)
然后回到这道题的题目。这道题时间上就是让m种颜色取奇数个,c-m种颜色取偶数个,求排列的个数。
根据上面的预备知识我们知道,奇数项指数生成函数为
本题的答案就是多项式
这里补充一点,
现在考虑如果将
设
因为x,-x会互相抵消,所以我们枚举
如果
代码
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define N 100using namespace std;double C[N+3][N+3];int c,m,n;double quickpow(double num,int x){ double ans=1; double base=num; while (x) { if (x&1) ans=ans*base; x>>=1; base=base*base; } return ans;}int main(){ freopen("a.in","r",stdin); for (int i=0;i<=N;i++) C[i][0]=1; for (int i=1;i<=N;i++) for (int j=1;j<=i;j++) C[i][j]=C[i-1][j-1]+C[i-1][j]; while (true) { scanf("%d",&c); if (!c) break; scanf("%d%d",&n,&m); if ((n-m)%2||m>c||m>n) { printf("0.000\n"); continue; } double ans=0; for (int i=0;i<=m;i++) for (int j=0;j<=c-m;j++) { double k=2.0*(i+j)-c; if ((m-i)&1) ans-=quickpow(k*1.0/c,n)*C[m][i]*C[c-m][j]; else ans+=quickpow(k*1.0/c,n)*C[m][i]*C[c-m][j]; } ans/=quickpow(2.0,c); ans*=C[c][m]; printf("%.3lf\n",ans); }}
- poj 1322 Chocolate (生成函数||概率DP)
- poj 1322 Chocolate(生成函数 or 概率dp)
- POJ-1322 Chocolate(概率DP)
- POJ 1322 Chocolate(概率DP)
- POJ--1322[Chocolate] DP+概率
- poj 1322 Chocolate (概率dp)
- poj 1322 Chocolate 概率dp
- POJ-1322 Chocolate(生成函数)
- POJ 1322 Chocolate 概率DP 近似取值
- POJ 1322 Chocolate (dp or 组合数学母函数)
- POJ 1322 Chocolate(母函数)
- 【TOJ 1118】Chocolate【概率DP】
- POJ 1322 概率DP
- poj 1322 概率DP
- poj 1322 概率dp
- poj 1322 概率dp
- POJ 2096(概率DP)
- POJ 2151(概率DP)
- 看脸的社会代码也要漂亮才行
- 机器学习经典图
- 使用ASM 实例的情况下,需要修改哪些数据库参数?
- CSS3的文字与字体
- Javascript应用开发实践指南
- poj 1322 Chocolate (生成函数||概率DP)
- JavaScript:数组大全
- Android 四大组件之Service 5.0版本
- Kafka 之 入门
- HTML5简单轮播的实现(使用JQuery)
- wnidows api 模拟鼠标拖动
- Android新特性之TabLayout+ViewPager悬停
- java基础3-集合类接口
- Android四大组件之BroadcastReceiver的使用