Activation HDU - 4089 (概率DP)
2024-09-04 05:47:06
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2005;
const double eps = 1e-10;
int n, m, k; double p1, p2, p3, p4;
double dp[2][MAXN], c[MAXN], pp[MAXN];
int main() {
while(~scanf("%d%d%d%lf%lf%lf%lf", &n, &m, &k, &p1, &p2, &p3, &p4)) {
if(p4 < eps) { puts("0.00000"); continue; }
double p = p2 / (1 - p1);
double p31 = p3 / (1 - p1);
double p41 = p4 / (1 - p1);
pp[0] = 1;
for(int i = 1; i <= n; ++i) pp[i] = pp[i-1] * p;
int now = 0;
dp[now][1] = p41 / (1 - p);
c[1] = p41;
for(int i = 2; i <= n; ++i) {
now ^= 1;
for(int j = 2; j <= k; ++j) c[j] = p31 * dp[now^1][j-1] + p41;
for(int j = k+1; j <= i; ++j) c[j] = p31 * dp[now^1][j-1];
double tmp = 0;
for(int j = 1; j <= i; ++j) tmp += pp[i-j] * c[j];
dp[now][i] = tmp / (1 - pp[i]);
dp[now][1] = p * dp[now][i] + c[1];
for(int j = 2; j < i; ++j) dp[now][j] = p * dp[now][j-1] + c[j];
}
printf("%.5f\n", dp[now][m]);
}
}
/*
j==1: dp[i][1]=p*dp[i][i]+p41;
2<=j<=k: dp[i][j]=p*dp[i][j-1]+p31*dp[i-1][j-1]+p41;
k<j<=i: dp[i][j]=p*dp[i][j-1]+p31*dp[i-1][j-1];
dp[i][j] = dp[i][j-1] * p + c[j]
*/
最新文章
- oc swizzling 真的好用
- 20150912华为机考2之";输入一段字符串(英文),将每个单词首字母大写后输出";
- CentOS 下安装JDK
- PC返回顶部浮动按钮
- 【转】C++ 类中的static,const,及引用类型的初始化
- golang byte转string 字节数组转字符串的问题
- jquery Tabs选项卡切换
- Linux SSL 双向认证 浅解
- 和为S的两个数
- dedecms环境优化
- WebApi 接口返回值类型详解 ( 转 )
- Docker学习笔记 - Docker容器内部署redis
- angularjs+ionic的app端分页和条件
- 编译原理作业(第一次)-完成retinf.c(阉割版)
- Python图片裁剪
- ovs常用操作
- JQ_下雪特效
- Delphi 的链式代码
- 实验三:C分支结构程序设计
- HDU 1199 &;amp;&;amp; ZOJ 2301 线段树离散化
热门文章
- 多个结果集union后保持各自原有排序
- Redis SETNX实现分布式锁
- 《Redis - 穿透/击穿/雪崩/集中失效》
- 将 PDF 论文的公式截图后转成 Word 可编辑公式(23)
- Python基础运算符(算数、比较、赋值、逻辑、成员)
- Linux下使用Vim粘贴文本错乱问题解决
- PAT甲级 图的遍历 相关题_C++题解
- 斜率优化dp学习笔记 洛谷P3915[HNOI2008]玩具装箱toy
- glib系列2 APP编译
- (二十一)SpringBoot之集成mybatis:使用mybatis xml