概率dp——hdu4089推公式+循环迭代
迭代是化简公式的常用技巧
dp[i][j]表示队伍中有i人,tomato排在第j位出现情况2的概率,那么先推出公式再进行简化
dp[i][1]=p21*dp[i][i] + p41
j<=k : dp[i][j]=p21*dp[i][j-1] + p31*dp[i-1][j-1] +p41
j>k : dp[i][j]=p21*dp[i][j-1] + p31*dp[i-1][j-1]
可见公式中的dp[i][1]和dp[i][i]是相关的,那么dp[i][j]也和dp[i][i]相关,所以只要迭代求出dp[i][i],然后再递推即可
在求dp[i][j]时所有dp[i-1][j]已经求出,所以后面的都是常数
因为dp[i][1]和dp[i][i]有关,所以需要迭代算方程先求出dp[i][i]
c数组是后面的常数,先处理出来即可
注意用滚动数组压缩内存,并特判
#include<bits/stdc++.h>
using namespace std; const double esp = 1e-;
const int maxn = ;
double c[maxn],pp[maxn],dp[][maxn]; int main(){
double p1,p2,p3,p4;
int n,m,k;
while(scanf("%d%d%d%lf%lf%lf%lf",&n,&m,&k,&p1,&p2,&p3,&p4)!=EOF){
if(p4<esp){puts("0.00000");continue;}
double p21=p2/(-p1),p31=p3/(-p1),p41=p4/(-p1);
pp[]=;c[]=p41;
for(int i=;i<=n;i++)pp[i]=pp[i-]*p21;
dp[][]=p41/(-p21); /*
dp[i][1]=p21*dp[i][i] + p41
j<=k : dp[i][j]=p21*dp[i][j-1] + p31*dp[i-1][j-1] +p41
j>k : dp[i][j]=p21*dp[i][j-1] + p31*dp[i-1][j-1]
在求dp[i][j]时所有dp[i-1][j]已经求出,所以后面的都是常数
因为dp[i][1]和dp[i][i]有关,所以需要迭代算方程先求出dp[i][i]
c数组是后面的常数,先处理出来即可
*/
int cur=;
for(int i=;i<=n;i++){
cur^=;
for(int j=;j<=k;j++)c[j]=p31*dp[cur^][j-]+p41;
for(int j=k+;j<=i;j++)c[j]=p31*dp[cur^][j-];
double tmp=c[]*pp[i-];//通过迭代方程算出dp[i][i]
for(int j=;j<=i;j++)tmp+=c[j]*pp[i-j];
dp[cur][i]=tmp/(-pp[i]);
dp[cur][]=p21*dp[cur][i]+c[];//通过递推算出dp[i][1]及其余项
for(int j=;j<i;j++)dp[cur][j]=p21*dp[cur][j-]+c[j];
}
printf("%.5f\n",dp[cur][m]);
}
}
概率dp——hdu4089推公式+循环迭代的更多相关文章
- 概率dp——逆推期望+循环迭代zoj3329
首先要推出dp[i]的期望方程,会发现每一项都和dp[0]相关, 那我们将dp[i]设为和dp[0]有关的式子dp[i]=a[i]*dp[0]+b[i],然后再回代到原来的期望方程里 然后进行整理,可 ...
- BZOJ.1076.[SCOI2008]奖励关(概率DP 倒推)
题目链接 BZOJ 洛谷 真的题意不明啊.. \(Description\) 你有k次选择的机会,每次将从n种物品中随机一件给你,你可以选择选或不选.选择它会获得这种物品的价值:选择一件物品前需要先选 ...
- sgu 495. Kids and Prizes (简单概率dp 正推求期望)
题目链接 495. Kids and Prizes Time limit per test: 0.25 second(s)Memory limit: 262144 kilobytes input: s ...
- hdu 3853 LOOPS (概率dp 逆推求期望)
题目链接 LOOPS Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others)Tota ...
- SGU 495 Kids and Prizes:期望dp / 概率dp / 推公式
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=495 题意: 有n个礼物盒,m个人. 最开始每个礼物盒中都有一个礼物. m个人依次随 ...
- HDU 4599 Dice (概率DP+数学+快速幂)
题意:给定三个表达式,问你求出最小的m1,m2,满足G(m1) >= F(n), G(m2) >= G(n). 析:这个题是一个概率DP,但是并没有那么简单,运算过程很麻烦. 先分析F(n ...
- Aeroplane chess(简单概率dp)
Hzz loves aeroplane chess very much. The chess map contains N+1 grids labeled from 0 to N. Hzz start ...
- CF 148D D Bag of mice (概率dp)
题目链接 D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Hello 2019 D 素因子贡献法计算期望 + 概率dp + 滚动数组
https://codeforces.com/contest/1097/problem/D 题意 给你一个n和k,问n经过k次操作之后留下的n的期望,每次操作n随机变成一个n的因数 题解 概率dp计算 ...
随机推荐
- 解决mac下,javac命令出现的乱码问题
今天突然检查我的jdk安装,发现出现了乱码 一,出现乱码
- MyBatis是如何使用的?
MyBatis前身世iBatis本是Apache的一个开源项目,2010年这个项目迁移到google code并改名为MyBatis. 一.高级软件介绍 1.JDK 8 2.Eclipse mars2 ...
- You believe in fate?
You believe in fate?你相信命运吗?
- 前端必备,十大热门的 JavaScript 框架和库
JavaScript 框架和库可以说是开源项目中最庞大也是最累的类目了,目前在github 上这一类的项目是最多的,并且几乎每隔一段时间就会出现一个新的项目席卷网络社区,虽然这样推动了创新的发展,但不 ...
- Springboot 上传文件
@PostMapping("/upload")//springboot可以直接扫描resource下的static文件夹下的静态文件 public String upload(@R ...
- vue-cli3+ant-design-vue+typescript 注意事项
项目参考vue-cli3-web-init ant-design配置部分 1. 实现ant-disign-vue的按需加载方案 (1)引入所有的组件,然后加载到vue上面 components-ant ...
- 暑假集训test-8-31(am)
1.字符串匹配 看到题目以为真是字符串题结果是数学题..70分做法很傻逼然而我更傻逼只有30... 正解是发现两个位置会匹配当且仅当mod gcd(lena,lenb)同余,在一个lcm(lena,l ...
- NX二次开发-UFUN获取工程图详细信息UF_DRAW_ask_drawing_info
NX9+VS2012 #include <uf.h> #include <uf_draw.h> #include <uf_part.h> UF_initialize ...
- NX二次开发-通过点击按钮来控制显示工具条
NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...
- POJ2516费用流
目录 目录 (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 目录 题意:传送门 AC代码: #include <iostream> #include <cstdio ...