poj1322 Chocolate 【 概率DP 】
题目链接:poj1322 Chocolate 【概率DP 】
题意:袋中有C种颜色巧克力,每次从其中拿出一块放桌上,如果桌上有两块相同颜色巧克力则吃掉,问取出N块巧克力后,求桌上正好剩下M块巧克力的概率。(已知,若有五种颜色,会发现大部分时间桌上有2或3块巧克力)
题解:我太弱了,看了官方题解:具体优化见代码。


#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = ;
double dp[][N];
int main() {
int c, n, m, i, j, cur;
while(~scanf("%d", &c), c) {
scanf("%d%d", &n, &m); if(m > c || m > n || (n-m)&) {//考虑奇偶,观察可得
printf("0.000\n");
continue;
} if(n > ) n = - (n&);//精度要求不高,n较大无影响 memset(dp, , sizeof(dp));
dp[][] = dp[][] = 1.0;//边界 cur = ;//运算优化,虽然感觉这里效果不大。。
int x = n-;
for(i = ; i <= n; ++i) {
dp[-cur][] = dp[cur][] / c;
dp[-cur][c] = dp[cur][c-] / c; for(j = ; j <= i && j < c; ++j) {
dp[-cur][j] = (j+1.0)/c * dp[cur][j+] + (c-j+1.0)/c * dp[cur][j-];
}
cur = -cur;
} printf("%.3f\n", dp[n&][m]);
}
return ;
}
下面有一个待验证的思路。。。。。。。。。。。挖坑ORZ
//yy:看完题以为纯概率论哇orz。。。我不会DP根本想不到吖。。。
取出n个巧克力后可能有c^n种情况,c种颜色的巧克力各有x1,x2...xc个,Σxi=n
设yi=xi mod 2,桌上剩余巧克力个数M=Σyi
这道题先分n是奇数还是偶数来讨论:
n是偶数的情况下,xi中必须有偶数个是奇数,也就是有偶数个yi=1
所以M可能的取值为0,2,4…2n,2n<c
【当M=k时,也就是说c个yi中一共有k个yi=1,则满足的情况有C(k c)种(从c个yi中选出k个令其为1)】
【总共的情况是C(0 c)+C(2 c)+...+C(2i c)=2^(c-1) 】
n为奇数时同理,则必须有奇数个xi为奇数,也就是奇数个yi=1,M的取值为1,3,...,2n-1
然后用组合数分别求出每种情况的概率就行了。。。。。。。
答案就是C(m,c) / 2^(c-1)
注:上面的情况是n>c。。。
如果n<c,只需把结论的分母变成 C(0 c)+C(2 c)+...+C(n c)即可 (n是偶数的情况)
还不晓得这个思路有没有问题,存不下那么大的组合数,精度问题也解决不了orz…好难啊
poj1322 Chocolate 【 概率DP 】的更多相关文章
- poj 1322 Chocolate (概率dp)
///有c种不同颜色的巧克力.一个个的取.当发现有同样的颜色的就吃掉.去了n个后.到最后还剩m个的概率 ///dp[i][j]表示取了i个还剩j个的概率 ///当m+n为奇时,概率为0 # inclu ...
- POJ-1322 Chocolate(概率DP)
Chocolate Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9279 Accepted: 2417 Special Jud ...
- [vijos1145]小胖吃巧克力<概率dp>
题目链接:https://vijos.org/p/1145 貌似还有一个一样的题是poj1322 chocolate,两个题只是描述不一样,意思都是一样的,不贵最近貌似poj炸了,所以也没法去poj ...
- Codeforces 28C [概率DP]
/* 大连热身D题 题意: 有n个人,m个浴室每个浴室有ai个喷头,每个人等概率得选择一个浴室. 每个浴室的人都在喷头前边排队,而且每个浴室内保证大家都尽可能均匀得在喷头后边排队. 求所有浴室中最长队 ...
- HDU 4405 Aeroplane chess (概率DP)
题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i 这个位置到达 n ...
- POJ 2096 Collecting Bugs (概率DP)
题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...
- POJ 2151 Check the difficulty of problems (概率DP)
题意:ACM比赛中,共M道题,T个队,pij表示第i队解出第j题的概率 ,求每队至少解出一题且冠军队至少解出N道题的概率. 析:概率DP,dp[i][j][k] 表示第 i 个队伍,前 j 个题,解出 ...
- 概率DP light oj 1030
t组数据 n块黄金 到这里就捡起来 出发点1 到n结束 点+位置>n 重掷一次 dp[i] 代表到这里的概率 dp[i]=(dp[i-1]+dp[i-2]... )/6 如果满6个的话 否则 ...
- hdu 4050 2011北京赛区网络赛K 概率dp ***
题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...
随机推荐
- Android新手常见问题(一)
[1]AAPT2 error: check logs for details File->Settings->Build->Gradle一看path里有中文 最根本的原因是因为use ...
- KVC的特殊用法
- (id)valueForKeyPath:(NSString *)keyPath方法的强大用法,举个例子: NSArray *array = @[@"name", @" ...
- spring中使用quartz时注入时出现的错误
错误1: 配置文件: <!-- 任务执行器的线程池 --> <bean id="taskExecutor" class="org.springframe ...
- php根据IP获取所在省份-百度api接口
这里用的file_put_contents,你也可以用别的,直接怼代码: //拼接传递的参数 $getData = array( 'query' => '127.0.0.1', 'resourc ...
- [转] Entity Framework添加记录时获取自增ID值
本文转自:http://blog.csdn.net/educast/article/details/8632806 与Entity Framework相伴的日子痛并快乐着.今天和大家分享一下一个快乐, ...
- CXF - 拦截器获取调用方法
没想到要弄这么一个东西. 起初只是想用interceptor记录一下webservice调用日志,后来却被要求在页面展示. 展示容易,但只是展示webservice的地址无法让用户从中明白什么. 那么 ...
- 第2天:JavaScript基础(运算符、案例、循环、冒泡以及prompt提示输入框)
一元运算在前在后的区别 加加 var num1 = 10; //++在后面 先参与运算 再自加1 var sum1 = num1++ +10; console.log("sum1的值:&qu ...
- 2017年12月16日 ASP.NET基本用法
ASP.NET初级添加 利用css代码跟ASP.NET还有Javascript原生,LinQ来写增跟展示数据 首先介绍一个非常好用的控件,灵活并且循环展示数据库里面的数据 <asp:Repeat ...
- IE11 F12 开发人员工具 查看 Cookie
参考网址:Using the F12 developer tools in IE11 Step1 : IE11 => F12 打开 开发人员工具 Step2:开发人员工具 => 网络F5 ...
- 【原创】MapReduce实战(一)
应用场景: 用户每天会在网站上产生各种各样的行为,比如浏览网页,下单等,这种行为会被网站记录下来,形成用户行为日志,并存储在hdfs上.格式如下: 17:03:35.012ᄑpageviewᄑ{&qu ...