http://acm.hdu.edu.cn/showproblem.php?pid=5985

作为队里负责动态规划的同学,做不出来好无奈啊。思考了一个下午,最好还是参考了别人的思想才写出来,数学啊!!!

这题随着K的增长,贡献的数值越来越少,所以只要K足够大(100左右就够了,一开始写30WA了),之后的就可以不考虑了。

那么对于每个K,我们又可以枚举每种硬币是最后留下来的那种,那么其他硬币必须是被耗尽的。但是还有一个隐藏要求,就是在第K次之前的一次时,其他硬币不能全部耗尽,不然就不存在第K次了!

这里千万不要用P(其余硬币在K-1次没有耗尽)*P(其余硬币在K次耗尽了),这两个并不是独立事件!

因为K=1是不存在违反隐藏要求的情况的,之前必然有硬币。而K>=2时如果直接用P(i类硬币未用尽)*P(其余硬币用尽)则会包含之前就已经剩最后一种,然后再删掉一部分得到第K次依旧剩最后一种的情况。

所以在计算的时候,把之后还有硬币被消除的那一部分概率给删去,剩下的就能保证当前是最后一次了。(此部分存疑,个人认为即时这样做了,还是不对的,奈何这样写就AC,我改了就WA)

#include<iostream>
#include <cstring>
#include <string>
#include <cstdio>
#define LL long long
using namespace std;
const LL K=;
double dp[][K][];//0: at least 1:dead all
int s[];
double p[];
double fastMi(double a,int b)
{
double mut=;
while(b)
{
if(b%!=)
mut*=a;
a*=a;
b/=;
}
return mut;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
for(int i=; i<n; i++)
scanf("%d %lf",&s[i],&p[i]);
for(int i=; i<n; i++)
{
for(int k=; k<K; k++)
{
dp[i][k][]=fastMi(-fastMi(p[i],k),s[i]);
dp[i][k][]=-dp[i][k][];
}
}
if(n==)
{
puts("1.000000");
continue;
}
for(int i=; i<n; i++)
{
double ans=0.0;
for(int k=; k<K-; k++)
{
double px=dp[i][k][]-dp[i][k+][];
for(int j=; j<n; j++)
{
if(j==i)continue;
px*=dp[j][k][];
}
ans+=px;
}
if(i==n-)
printf("%.6f\n",ans);
else printf("%.6f ",ans);
} }
return ;
}

hdu-5985 概率DP的更多相关文章

  1. HDU 5985 概率

    n种硬币各有cnt[i]枚,每轮下其有p[i]概率保留,问各种硬币只有它存活到最后一轮的概率. 设k轮后i硬币存活概率$a[i][k]=(1-p^k_i)^{cnt[i]}$ 则最后只有第i种硬币存活 ...

  2. HDU 4599 概率DP

    先推出F(n)的公式: 设dp[i]为已经投出连续i个相同的点数平均还要都多少次才能到达目标状态. 则有递推式dp[i] = 1/6*(1+dp[i+1]) + 5/6*(1+dp[1]).考虑当前这 ...

  3. HDU 5001 概率DP || 记忆化搜索

    2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP  測 ...

  4. hdu 3853 概率dp

    题意:在一个R*C的迷宫里,一个人在最左上角,出口在右下角,在每个格子上,该人有几率向下,向右或者不动,求到出口的期望 现在对概率dp有了更清楚的认识了 设dp[i][j]表示(i,j)到(R,C)需 ...

  5. HDU 4815 概率dp,背包

    Little Tiger vs. Deep Monkey Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K ( ...

  6. hdu 4050(概率dp)

    算是挺简单的一道概率dp了,如果做了前面的聪聪于可可的话,这题不需要什么预处理,直接概率dp就行了... #include <stdio.h> #include <stdlib.h& ...

  7. HDU 4405 (概率DP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4405 题目大意:飞行棋.如果格子不是飞行点,扔骰子前进.否则直接飞到目标点.每个格子是唯一的飞行起点 ...

  8. hdu 4336 概率dp + 状压

    hdu 4336 小吃包装袋里面有随机赠送一些有趣的卡片,如今你想收集齐 N 张卡片.每张卡片在食品包装袋里出现的概率是p[i] ( Σp[i] <= 1 ), 问你收集全部卡片所需购买的食品数 ...

  9. hdu 4576(概率dp+滚动数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4576 思路:由于每次从某一位置到达另一位置的概率为0.5,因此我们用dp[i][j]表示第i次操作落在 ...

  10. hdu 5001 概率DP 图上的DP

    http://acm.hdu.edu.cn/showproblem.php?pid=5001 当时一看是图上的就跪了 不敢写,也没退出来DP方程 感觉区域赛的题  一则有一个点难以想到 二则就是编码有 ...

随机推荐

  1. oracle数据库数据库表空间查询及扩充

    1.查询表空间,及表空间的大小 SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size FROM dba_tabl ...

  2. ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(3)

    4. 主从表关系 名称 类型 说明 MasterSource 从表对应于主表的DataSource组件 DetailFields 从表中对应于主表字段的外键字段 MasterFields 主表中关联从 ...

  3. repo forall -c 用法【转】

    本文转载自:https://blog.csdn.net/u010164190/article/details/78332484 .repo forall命令 # repo forall -help # ...

  4. HDU1285 确定比赛问题【拓扑排序+优先队列】

    题目 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩, ...

  5. yum仓库中源的配置与使用

    yum 主要功能是更方便的添加/删除/更新RPM 包,自动解决包的倚赖性问题,便于管理大量系统的更新问题. yum 可以同时配置多个资源库(Repository),简洁的配置文件(/etc/yum.c ...

  6. 集合05_Collections工具类

    Collections工具类 提供大量方法用于操作集合,比如排序,查找,替换 同步控制 提供synchronizedXxx()方法将指定集合类包装成线程同步的集合. List<String> ...

  7. Windows,远程计算机:X.X.X.X,这可能是由于CredSSP加密Oracle修正

    https://blog.csdn.net/wyhwlls/article/details/80320301 近期window 10家庭版更新后,远程桌面连不到服务器了 网上有卸载补丁,修改组策略什么 ...

  8. Install and Compile MatConvNet: CNNs for MATLAB --- Deep Learning framework

    Install and Compile MatConvNet: CNNs for MATLAB --- Deep Learning framework 2017-04-18  10:19:35 If ...

  9. 数据集是 seq 文件的处理办法

    数据集是 seq 文件的处理办法 2017-03-17 最近下了一个数据集,是 seq 格式的,第一次处理这种数据.使用了官方提供的 matlab 工具包:https://pdollar.github ...

  10. 19. --mus-- 音乐,娱乐(词20)