POJ-1322 Chocolate(概率DP)
Chocolate
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 9279 Accepted: 2417 Special Judge
Description
In 2100, ACM chocolate will be one of the favorite foods in the world.
“Green, orange, brown, red…”, colorful sugar-coated shell maybe is the most attractive feature of ACM chocolate. How many colors have you ever seen? Nowadays, it’s said that the ACM chooses from a palette of twenty-four colors to paint their delicious candy bits.
One day, Sandy played a game on a big package of ACM chocolates which contains five colors (green, orange, brown, red and yellow). Each time he took one chocolate from the package and placed it on the table. If there were two chocolates of the same color on the table, he ate both of them. He found a quite interesting thing that in most of the time there were always 2 or 3 chocolates on the table.
Now, here comes the problem, if there are C colors of ACM chocolates in the package (colors are distributed evenly), after N chocolates are taken from the package, what’s the probability that there is exactly M chocolates on the table? Would you please write a program to figure it out?
Input
The input file for this problem contains several test cases, one per line.
For each case, there are three non-negative integers: C (C <= 100), N and M (N, M <= 1000000).
The input is terminated by a line containing a single zero.
Output
The output should be one real number per line, shows the probability for each case, round to three decimal places.
Sample Input
5 100 2
0
Sample Output
0.625
题意:就是在一堆巧克力中选取n个,每当有两个颜色一样的巧克力就把他们吃了,问,桌面上剩下的巧克力是m个的概率。这是一道概率DP题目。状态转移方程:
dp[i][j]=dp[i-1][j-1](c-(j-1))/(c*1.0)+dp[i-1][j+1](j+1)/(c*1.0);
此题注意,数据量相当大,有两个节省大量时间的减值,一个是若m和n同奇或同偶的,则概率为0
n大于1000的时候,
if(n>1000)
{
n=1000+n%2;
}
似乎用到统计学的知识,反正大于1000,之后的数据量影响不大,相当于1000或者1001;
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <stdlib.h>
using namespace std;
double dp[1010][105];
int c,n,m;
int main()
{
while(scanf("%d",&c)!=EOF)
{ if(c==0)
break;
scanf("%d%d",&n,&m);
if(m>c||m>n||((n%2)!=(m%2)))
{
printf("0.000\n");
}
else
{
if(n>1000)
{
n=1000+n%2;
}
memset(dp,0,sizeof(dp));
dp[0][0]=1;
dp[1][0]=0;
for(int i=1;i<=n;i++)
{
dp[i][0]=dp[i-1][1]*(1)/(c*1.0);
dp[i][c]=dp[i-1][c-1]*(c-(c-1))/(c*1.0);
for(int j=1;j<c;j++)
{
dp[i][j]=dp[i-1][j-1]*(c-(j-1))/(c*1.0)+dp[i-1][j+1]*(j+1)/(c*1.0);
}
}
printf("%.3lf\n",dp[n][m]);
}
}
return 0;
POJ-1322 Chocolate(概率DP)的更多相关文章
- poj 1322 Chocolate (概率dp)
///有c种不同颜色的巧克力.一个个的取.当发现有同样的颜色的就吃掉.去了n个后.到最后还剩m个的概率 ///dp[i][j]表示取了i个还剩j个的概率 ///当m+n为奇时,概率为0 # inclu ...
- POJ 3156 - Interconnect (概率DP+hash)
题意:给一个图,有些点之间已经连边,现在给每对点之间加边的概率是相同的,问使得整个图连通,加边条数的期望是多少. 此题可以用概率DP+并查集+hash来做. 用dp(i,j,k...)表示当前的每个联 ...
- POJ 1322 Chocolate
Chocolate Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8245 Accepted: 2186 Speci ...
- POJ 3071 Football(概率DP)
题目链接 不1Y都对不住看过那么多年的球.dp[i][j]表示i队进入第j轮的概率,此题用0-1<<n表示非常方便. #include <cstdio> #include &l ...
- POJ 1322 Chocolate(母函数)
题目链接:http://poj.org/problem?id=1322 题意: 思路: double C[N][N]; void init() { C[0][0]=1; int i,j; for(i= ...
- Scout YYF I POJ - 3744(概率dp)
Description YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into th ...
- POJ - 2151 (概率dp)
题意:有T个队伍,有M道题,要求每个队至少有一道题,并且有队伍至少过N道题的概率. 这个题解主要讲一下,后面的,至少有一道题解决和至少一道题至N-1道题解决,到底怎么算的,其实,很简单,就是母函数. ...
- poj 3071 Football (概率DP水题)
G - Football Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- POJ 1202 Family 概率,DP,高精 难度:2
http://poj.org/problem?id=1202 难度集中在输出格式上,因为输出格式所以是高精度 递推式: 血缘肯定只有从双亲传到儿子的,所以,设f,m为双亲,son为儿子,p[i][j] ...
- poj 3071 Football(概率dp)
id=3071">http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率 ...
随机推荐
- Java虚拟机(一):JVM内存结构
所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问 ...
- 统计js数组中奇数元素的个数
如何统计一个JS数组中奇数元素的个数呢? 这是群友提出的一个问题,大部分群友给出的是遍历 然后对2取模,得到最终结果. 这样的写法是最容易想得到的,那么有没有其他思路呢? 这里我提供另外一种思路,我们 ...
- android studio 使用 SVN
通过android studio来进行版本控制,先前已经安装了TortoiseSVN-1.9.2,但是在打开android studio的时候会出现 Can't use Subversion comm ...
- kafka进程总是在启动一段时间后自动停止
解决办法: bin/kafka-server-start.sh -daemon ./config/server.properties 进行启动,到现在为止 kafka 还在正常运行.和不加 -daem ...
- python 学习笔记---文件处理
1.打开文件读取数据 f =open(“wenjian.txt”,"r") print(f) f.close() 直接变成列表--->list(f) for each_lin ...
- Python进阶 学习笔记(一)
(笔记范围:第一章 课程介绍:第二章 函数式编程:第三章 模块) Python支持的函数式编程 不是纯函数式编程:允许有变量 支持高阶函数:函数也可以作为变量传入 支持闭包:有了闭包就能返回函数 有限 ...
- Android对touch事件的拦截,在View Tree上的传递顺序
当发生touch事件时,系统会产生一个MotionEvent并且沿着View Tree开始传递.首先获取MotionEvent是View Tree的根节点,根节点通常是一个ViewGroup,View ...
- Android学习之PopupWindow
Android的对话框有两种:PopupWindow和AlertDialog. 详细说明如下: AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情: AlertDi ...
- cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration的解决
导入了一个工程,编译什么的都还好,但是报了一个XML的错误. cvc-complex-type.2.4.c: The matching wildcard is strict, but no decla ...
- 在apache虚拟目录配置
在apache虚拟目录配置中 <VirtualHost *:80>xxx xxx xxx</VirtualHost> 不能写成 <VirtualHost *>xxx ...