挺不错的概率DP,看似基础,实则很考验扎实的功底

这题很明显是个DP,为什么???找规律或者算组合数这种概率,N不可能给的这么友善。。。

因为DP一般都要在支持N^2操作嘛。

稍微理解一下,这DP[i][j]还是不好想啊,首先是写DP[I][j]的含义

首先我们想这道题是要求一个最优决策下的期望,那么这个我们的最优决策是什么???

决策就是:我们假设我这一次需要翻转K个硬币,我们不愿翻那些已经在正面的,而去翻那些没有在正面的

而如果剩余的反面的不足,我再去翻转正面的

那么给dp[i][j]一个含义,代表我现在进行第i轮,已经翻转了j个正面了,并用一个K表示我当前这一轮有K个正面朝上,再写出转移方程

dp[i+1][j+k]=dp[i][j]*C(z,i)*pow(0.5,z);

C(z,k)*pow(0.5,z);就代表,这一次需要在Z个硬币中,翻转上来K个的概率

而如果出现剩余面不足,我翻转反面,相减就可以

注意POW会超时,写一个p[i]的数组,表示(1/2)^i就可以了

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;
double c[][];
double dp[][];
double p[];
int main()
{
int n,m,k;
int t,z;
scanf("%d",&t);
int tmp1,tmp2,tmp3;
c[][]=;
for (int i=;i<=; i++)
{
c[i][]=;
for (int j=;j<=i;j++)
{
c[i][j]=c[i-][j-]+c[i-][j];
}
}
p[]=;
for (int i=;i<=;i++){
p[i]=p[i-]*0.5;
}
while(t--)
{
scanf("%d%d%d",&n,&m,&z);
memset(dp,,sizeof(dp));
dp[][]=;
for (int i=; i<m; i++)//本轮
{
for (int j=; j<=n; j++)//已经有j面向下了
{
if(dp[i][j]==)continue;
for (int k=; k<=z; k++)//如果在这t枚中得到了k个向下的
{
if (j+z<=n)//全选面向下的
dp[i+][j+k]+=dp[i][j]*p[z]*c[z][k];
else //选完剩余的还要选已经向上的
dp[i+][k+n-z]+=dp[i][j]*p[z]*c[z][k];
}
}
}
double ans=;
for (int i=;i<=n;i++){
ans+=dp[m][i]*i;
}
printf("%.3lf\n",ans);
}
return ;
}

ACM-ICPC 2017 Asia Urumqi:A. Coins(DP)的更多相关文章

  1. ACM-ICPC 2017 Asia Urumqi:A. Coins(DP) 组合数学

    Alice and Bob are playing a simple game. They line up a row of nn identical coins, all with the head ...

  2. 五大常用算法之二:动态规划算法(DP)

    一.基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 二.基本思想与策略 基本 ...

  3. 2013 ACM/ICPC Asia Regional Changsha Online - G(DP)

    第一眼就想到DP,然后想了N久就想不到可以不重算的DP  最后没办法了 先算出来 再去重.. 因为最多只有三个 对于三个来说有三种组合情况 x+y+z, x*y*z, x*y+z 那要么 x,y,z都 ...

  4. HDU1398:Square Coins(DP水题)

    Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  5. ACM/ICPC 之 DFS求解欧拉回路+打表(POJ1392)

    本题可以通过全部n位二进制数作点,而后可按照某点A的末位数与某点B的首位数相等来建立A->B有向边,以此构图,改有向图则是一个有向欧拉回路,以下我利用DFS暴力求解该欧拉回路得到的字典序最小的路 ...

  6. 习题:就是干(DP)

    洛谷2301 题目描述 眼看着老师大军浩浩荡荡的向机房前进.LOI 的同学们决定动用自己的力量来保卫他们的好朋友loidc.现在每个人都要挑选自己的武器——两根木棍.一根用做远距离投掷,另一根用做近距 ...

  7. 九度OJ 1086:最小花费 (DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3960 解决:819 题目描述: 在某条线路上有N个火车站,有三种距离的路程,L1,L2,L3,对应的价格为C1,C2,C3.其对应关系如下 ...

  8. 九度OJ 1101:计算表达式 (DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4340 解决:1335 题目描述: 对于一个不存在括号的表达式进行计算 输入: 存在多种数据,每组数据一行,表达式不存在空格 输出: 输出结 ...

  9. HDU6024:Building Shops(DP)

    传送门 题意 在一条直线上有n个教室,现在要设置糖果店,使得最后成本最小,满足以下两个条件: 1.若该点为糖果店,费用为cost[i]; 2.若不是,则为loc[i]-最近的糖果店的loc 分析 dp ...

随机推荐

  1. js计算两个日期的天数差值

    js计算两个日期的天数差值 通过两个日期计算这两个日期之间的天数差值 /** * 计算天数差的函数,通用 * @param sDate1 * @param sDate2 * @returns {Num ...

  2. LNMP下动静分离部署phpmyadmin软件包

    LNMP环境肯定是先要配置好的.可以参考我之前的博客.那我们直接进行配置,我这里使用了三台机器进行动静分离部署,第一台负责nginx反向代理,第二台负责php-fpm应用程序以及mariadb的服务器 ...

  3. linux之在当前目录下按照文件大小进行排序的三种方法

    当前目录下按照文件大小排序 [root@test23 script]# ls -lSh 总用量 44K -rw-r--r-- 1 root root 2.4K 12月 8 17:24 test.con ...

  4. Mybatis&orcale update语句中接收参数为对象

    Mybatis的 mapper.xml 中 update 语句使用 if 标签判断对像属性是否为空值. UserDTO是传过来参数的类型,userDTO是在mapperDao接口中给更新方法的参数起的 ...

  5. centos 上安装phpstorm

    phpstorm在centos上运行依赖JDK,所以先安装JDK环境. 假如是centos自带的openjdk,直接卸载,不支持phpstorm. 下载jdk-7u45-linux-i586.tar. ...

  6. centos7下安装docker(13docker存储)

    Docker为容器提供了两种存放数据的资源: 1.storage driver管理的镜像层和容器层 2.Data volume Storage driver 之前我们学习镜像的时候知道镜像的分层结构: ...

  7. POJ1419 Graph Coloring

    嘟嘟嘟 求无向图的最大独立集. 有这么一回事:最大独立集=补图的最大团. 所谓的最大团,就是一个子图,满足图中任意两点都有边. 然后ssy巨佬告诉了我一个很没有道理强的做法:随机. 每一次random ...

  8. php一致性hash算法

    原理部分转自:https://www.jianshu.com/p/e8fb89bb3a61 基本场景 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object ...

  9. MATLAB中的FOR循环问题

    做量化操作的时候经常需要使用到matlab编写策略或者计算多因子,for循环非常慢,自己找了一些matlab中for循环的优化方法,for的部分每处理一个大矩阵都要花费大量的时间,这是不可避免需要遇到 ...

  10. PAT A1126 Eulerian Path (25 分)——连通图,入度

    In graph theory, an Eulerian path is a path in a graph which visits every edge exactly once. Similar ...