poj 1322 Chocolate
来源:互联网 发布:工信部 大数据证书 编辑:程序博客网 时间:2024/05/17 11:37
题目:http://poj.org/problem?id=1322
题意:有C种不同颜色的巧克力,每种巧克力同样多,把巧克力一个一个拿到桌子上,当发现有相同颜色就把相同颜色的吃掉,求取出n个后,还剩m个在桌子上的概率。
刚开始被题目的数据范围吓住了,知道用dp,但不敢下手,看了discuss,尼玛把大于1000的奇数改为1001,偶数改为1000就行了,不知道为什么是对的,试着敲了下,居然过了~~~
很显然,当某时刻桌子上还剩m个巧克力,它们的颜色一定都不相同。用dp[i][j]表示取i个巧克力后,还剩j个的概率。则对每个dp[i][j],如果新拿出的巧克力与目前桌子上的巧克力颜色都不相同,则概率为(c-j+1)/c,若新拿出的巧克力与目前桌子上的某个巧克力颜色相同,则概率为(j+1)/c(原来桌上有j+1个,拿出来一个,吃了两个,最后剩下j个),于是dp[i][j]=dp[i-1][j-1]*(c-j+1)/c+dp[i-1][j+1]*(j+1)/c。
#include<cstdio>#include<cstring>double dp[1005][1005];int main(){ int c,n,m,i,j; while(scanf("%d",&c),c) { scanf("%d%d",&n,&m); if(m>c||m>n||(n+m)%2==1) { printf("0.000\n"); continue; } if(n>1000) n=1000+n%2; memset(dp,0,sizeof(dp)); dp[0][0]=1; for(i=1;i<=n;i++)for(j=0;j<=c;j++){ if(j==0) dp[i][j]=dp[i-1][j+1]/c; else if(j==c) dp[i][j]=dp[i-1][j-1]/c; else dp[i][j]=dp[i-1][j-1]*(c-j+1)/c+dp[i-1][j+1]*(j+1)/c;} printf("%.3lf\n",dp[n][m]); } return 0;}
- poj 1322 Chocolate
- poj 1322 Chocolate
- poj 1322 Chocolate
- poj 1322 Chocolate
- POJ 1322 Chocolate
- poj 1322 Chocolate
- POJ 1322 Chocolate 笔记
- POJ--1322[Chocolate] DP+概率
- poj 1322 Chocolate (概率dp)
- poj 1322 Chocolate 概率dp
- POJ 1322 Chocolate(母函数)
- POJ-1322 Chocolate(概率DP)
- POJ 1322 Chocolate(概率DP)
- POJ-1322 Chocolate(生成函数)
- POJ 1322 Chocolate (dp or 组合数学母函数)
- POJ 1322 Chocolate 概率DP 近似取值
- poj 1322 Chocolate(生成函数 or 概率dp)
- poj 1322 Chocolate (生成函数||概率DP)
- escape()、encodeURI()、encodeURIComponent()区别详解
- 交互系统公司(Interactive Systems Corporation)
- UITableView 多选
- Windows Store apps开发[57]Windows 8 开发31日
- ubuntu下用户的创建与删除
- poj 1322 Chocolate
- MySQL索引背后的数据结构及算法原理
- c++4种类型转换
- 非阻塞connect
- servlet你不得不要记住的一些常用的转换句子(1)
- stm32标准外设库使用详解
- android使用soap协议访问webservice实现天气预报功能
- linux 性能监控命令4——free
- UML用例图——更直观的需求分析