参考博客:http://www.cnblogs.com/kang000/p/8571071.html  (这篇博客写的真的走心,ORZ)

题意
有n个硬币排成一排,开始的时候所有的硬币都是正面朝下,你必须要扔K次硬币,每次选择一个硬币,如果你采取最优策略,K次以后朝上的硬币数的最大期望是多少?

分析

一脸懵逼两脸懵逼三脸懵逼···

--------------------------------------------------------------------------

随机变量X是指朝上的硬币数,当有N枚硬币的时候,X=0,1,2,3....N

E(X)=1*p(1)+2*p(2)+....+n*p(n)。

要想求最大期望,我们在扔硬币的时候要遵循一个策略:尽量扔正面朝下的硬币

如果当前有0到n-1枚硬币正面朝上,我们可以选择正面朝下的硬币来扔,扔完以后朝上硬币数不变或者+1

如果当前有n枚硬币正面朝上,我们只能选择正面朝上的硬币来扔,扔完以后朝上的硬币数不变或者-1

-----------------------------------------------------------------------------------------------

令dp[i][j]为扔i次以后j枚硬币朝上的概率

根据上面总结的规律,我们可以的到状态转移方程

当j<n的时候

dp[i+1][j]+=dp[i][j]*0.5

dp[i+1][j+1]+=dp[i][j]*0.5

当j=n的时候

dp[i+1][j+1]+=dp[i][j]*0.5

dp[i+1][j-1]+=dp[i][j]*0.5

这样递推出概率来以后遍历一遍j求期望就好了~

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7. const int maxn=;
  8. double dp[maxn][maxn];
  9. int n,k;
  10. int main(){
  11. scanf("%d%d",&n,&k);
  12. memset(dp,,sizeof(dp));
  13. dp[][]=;
  14.  
  15. for(int i=;i<k;i++){
  16. for(int j=;j<=n;j++){
  17. if(j<n){
  18. dp[i+][j]+=0.5*dp[i][j];
  19. dp[i+][j+]+=0.5*dp[i][j];
  20. }
  21. if(j==n){
  22. dp[i+][j]+=0.5*dp[i][j];
  23. dp[i+][j-]+=0.5*dp[i][j];
  24. }
  25. }
  26. }
  27. /*for(int i=0;i<=k;i++){
  28. for(int j=0;j<=n;j++){
  29. printf("%d %d %f\n",i,j,dp[i][j]);
  30. }
  31. }*/
  32. double ans=;
  33. for(int i=;i<=n;i++){
  34. ans+=dp[k][i]*i;
  35. }
  36. printf("%.6f",ans);
  37.  
  38. return ;
  39. }

Gym 101606 F-Flipping Coins(概率dp)的更多相关文章

  1. Gym 101606F - Flipping Coins - [概率DP]

    题目链接:https://codeforc.es/gym/101606/problem/F 题解: 假设 $f[i][j]$ 表示抛 $i$ 次硬币,有 $j$ 个硬币正面朝上的概率. 所以只有两种挑 ...

  2. 2017 ICPC Asia Urumqi A.coins (概率DP + 期望)

    题目链接:Coins Description Alice and Bob are playing a simple game. They line up a row of nn identical c ...

  3. atcoderI - Coins ( 概率DP)

    I - Coins Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement Let NN b ...

  4. 2017 ICPC乌鲁木齐 A Coins 概率dp

    Coins 题意:一开始所有n个硬币都是反面朝上的,每次必须拿k个来抛,抛的人足够聪明,问m次之后向上的硬币的期望. 首先说了这个足够聪明的意思,就是只要向反面的有k个就不会sb地去拿向正面的来抛,想 ...

  5. Gym 101174D Dinner Bet(概率DP)题解

    题意:n个球,两个人每人选C个球作为目标,然后放回.每回合有放回的拿出D个球,如果有目标球,就实现了这个目标,直到至少一个人实现了所有目标游戏结束.问结束回合的期望.误差1e-3以内. 思路:概率DP ...

  6. HDU5985 Lucky Coins 概率dp

    题意:给你N种硬币,每种硬币有Si个,有Pi 概率朝上,每次抛所有硬币抛起,所有反面的拿掉,问每种硬币成为最后的lucky硬币的概率. 题解:都知道是概率dp,但是模拟赛时思路非常模糊,很纠结,dp[ ...

  7. HDU.5985.Lucky Coins(概率DP)

    题目链接 \(Description\) 有n(n<=10)种硬币,已知每种硬币的数量和它抛一次正面朝上的概率pi.进行如下过程:每次抛一次所有硬币,将正面朝下的硬币去掉.重复该过程直到只剩一种 ...

  8. 2016 ACM-ICPC NEERC F. Foreign Postcards (概率DP)

    2016 ACM-ICPC NEERC F. Foreign Postcards 题意:有一串由C.W组成的字符串,每次截取长度为k(1<=k<=n且k随机)的前缀,如果该前缀首位为W,则 ...

  9. Atcoder Educational DP Contest I - Coins (概率DP)

    题意:有\(n\)枚硬币,每枚硬币抛完后向上的概率为\(p[i]\),现在求抛完后向上的硬币个数大于向下的概率. 题解:我们用二维的\(dp[i][j]\)来表示状态,\(i\)表示当前抛的是第\(i ...

  10. Gym 101606 - A/B/C/D/E/F/G/H/I/J/K/L - (Undone)

    链接:https://codeforces.com/gym/101606 A - Alien Sunset 暴力枚举小时即可. #include<bits/stdc++.h> using ...

随机推荐

  1. 【MFC】mfc控件位置调整和坐标确定 .

    摘自DoubleLi:   http://www.cnblogs.com/lidabo/archive/2012/08/24/2654678.html mfc控件位置调整和坐标确定 http://my ...

  2. Oracle回收站 使用

    查询回收站 SELECT * FROM RECYCLEBIN; SELECT * FROM USER_RECYCLEBIN; --USER_RECYCLEBING与RECYCLEBIN是同义词,字段完 ...

  3. Java实现三种常用的查找算法(顺序查查找,折半查找,二叉排序树查找)

    public class Search { public class BiTreeNode{ int m_nValue; BiTreeNode m_pLeft; BiTreeNode m_pRight ...

  4. [BZOJ5133][CodePlus2017年12月]白金元首与独舞

    bzoj luogu 题意 给你一个\(n*m\)的网格,每个位置上有一个箭头指向上或下或左或右.有些位置上还没有箭头,现在要求你在这些没有箭头的位置上填入箭头,使得从网格的任意一个位置开始,都可以沿 ...

  5. UVA136 Ugly Numbers

    题意 PDF 分析 用堆和集合维护即可. 时间复杂度\(O(1500 \log n)\) 代码 #include<iostream> #include<cstdio> #inc ...

  6. php 日期时间运算比较

    $sql= "select * from t_datestudy where id='4750' and agreemode='2' and school_agree !='1'" ...

  7. (转)xshell基本操作步骤

    xshell  操作方法如下: mkdir +文件夹名   (新建目录) ls 文件浏览(使用ls命令列出文件列表的信息,默认情况下为当前目录下的所有文件,并按照字母顺序排列) file [选项].. ...

  8. laravel修改命名空间中的App为各自项目的名称(个人喜好)

    学习源头:https://blog.csdn.net/xx1129244705/article/details/77965618 laravel框架的应用默认命名空间是App,修改命名空间的可通过ap ...

  9. 移植LWIP(ENC28J60)

       上图就是整个移植的基本思路,非常清晰的三个层次.其实想想,本质上就是收发数据,只是LWIP协议通过对数据的封装可以实现网络传输.从图中我们就可以看到这里首先需要ENC28J60的驱动,这个驱动需 ...

  10. netty中的websocket

    使用WebSocket 协议来实现一个基于浏览器的聊天室应用程序,图12-1 说明了该应用程序的逻辑: (1)客户端发送一个消息:(2)该消息将被广播到所有其他连接的客户端. WebSocket 在从 ...