题目链接: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 】的更多相关文章

  1. poj 1322 Chocolate (概率dp)

    ///有c种不同颜色的巧克力.一个个的取.当发现有同样的颜色的就吃掉.去了n个后.到最后还剩m个的概率 ///dp[i][j]表示取了i个还剩j个的概率 ///当m+n为奇时,概率为0 # inclu ...

  2. POJ-1322 Chocolate(概率DP)

    Chocolate Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9279 Accepted: 2417 Special Jud ...

  3. [vijos1145]小胖吃巧克力<概率dp>

    题目链接:https://vijos.org/p/1145 貌似还有一个一样的题是poj1322 chocolate,两个题只是描述不一样,意思都是一样的,不贵最近貌似poj炸了,所以也没法去poj ...

  4. Codeforces 28C [概率DP]

    /* 大连热身D题 题意: 有n个人,m个浴室每个浴室有ai个喷头,每个人等概率得选择一个浴室. 每个浴室的人都在喷头前边排队,而且每个浴室内保证大家都尽可能均匀得在喷头后边排队. 求所有浴室中最长队 ...

  5. HDU 4405 Aeroplane chess (概率DP)

    题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i  这个位置到达 n ...

  6. POJ 2096 Collecting Bugs (概率DP)

    题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...

  7. POJ 2151 Check the difficulty of problems (概率DP)

    题意:ACM比赛中,共M道题,T个队,pij表示第i队解出第j题的概率 ,求每队至少解出一题且冠军队至少解出N道题的概率. 析:概率DP,dp[i][j][k] 表示第 i 个队伍,前 j 个题,解出 ...

  8. 概率DP light oj 1030

    t组数据 n块黄金 到这里就捡起来 出发点1 到n结束  点+位置>n 重掷一次 dp[i] 代表到这里的概率 dp[i]=(dp[i-1]+dp[i-2]... )/6  如果满6个的话 否则 ...

  9. hdu 4050 2011北京赛区网络赛K 概率dp ***

    题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...

随机推荐

  1. Program, Process and Thread

    A program is an executable file store. A process is a running program. A thread is a single sequence ...

  2. 入门系列之在Nginx配置Gzip

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由小铁匠米兰的v 发表于云+社区专栏 简介 网站加载的速度取决于浏览器必须下载的所有文件的大小.减少要传输的文件的大小可以使网站不仅加载 ...

  3. gihub简单学习 步步操作(简单易学)

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

  4. 阿里云两台服务器之间拷贝文件命令scp

    参考:云栖社区 不同的Linux之间copy文件通常有4种方法 1.ftp 2.samba服务 3.sftp 4.scp 最简单的方法就是scp,可以理解为ssh管道下的cp命令 把当前一个文件cop ...

  5. asp get与post获取的区别

    1.HTTP请求格式: <request line> <headers> <blank line> [<request-body>] 在HTTP请求中, ...

  6. node版本管理nvm使用

    nvm:Node Version Manager,用来管理node版本,可以在一台机器上来回切换node版本,比较方便. win下建议使用 nvm-windows nodist linux下直接使用n ...

  7. 十三、nginx 强制下载txt等文件

    当前的浏览器能够识别文件格式,如果浏览器本身能够解析就会默认打开,如果不能解析就会下载该文件. 那么使用nginx做资源服务器的时候,如何强制下载文件呢? location /back/upload/ ...

  8. 1、springboot之HelloWorld

    最基本的,官网copy 创建maven项目 maven中添加 <parent> <groupId>org.springframework.boot</groupId> ...

  9. 设计模式入门,装饰着模式,c++代码实现

    // test03.cpp : Defines the entry point for the console application.////设计模式第3章 装饰者模式#include " ...

  10. java IO流实现删除文件夹以及文件夹中的内容

    这篇主要是对IO文件流对文件常用处理中的删除文件夹,平时我们直接删除文件夹既可以删除里面的全部内容. 但是java在实现删除时,只能是文件才会被删除. 所以这里需要定义一个方法,来递归调用方法(递归调 ...