博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4089 Activation
阅读量:5926 次
发布时间:2019-06-19

本文共 1411 字,大约阅读时间需要 4 分钟。

        概率dp,这种一个点作为起点,求到多点的概率或期望的都可以倒过来想。。。即让起点变为那多个点,终点(即答案)即为原来起点的值。

       dp[ i ][ 1 ] = p1 * dp[ i ][ 1 ] + p2 * dp[ i ][ i ] ---- (1);

       dp[ i ][ j ]  = p1 * dp[ i ][ i ]  + p2 * dp[ i ][ j - 1] + p3 * dp[ i - 1][ j - 1]  + (j <= k ? p4 : 0) ----- (2);   

       对(2)式递推下去,就可以结合(1)式得出dp[ i ][ 1]的值。。。然后递推即可,然后求得的dp[ n ][ m ] 即为所求。

       注意:p3 && p4 == 0 时要特判。。。

 

#include
#include
#include
#include
#include
#define LL long long#define CLR(a, b) memset(a, b, sizeof(a))using namespace std;const int N = 2002;const int MOD = 1e9 +7;double dp[2][N];int main(){ int n, m , k, i, j; double p1, p2, p3, p4; while(scanf("%d%d%d%lf%lf%lf%lf", &n, &m, &k, &p1, &p2, &p3, &p4) != EOF) { if(p4 == 0) {puts("0.00000"); continue;} dp[1][1] = p4 / (1 - p1 - p2); double a = p2 / (1 - p1), b = p3 / (1 - p1), c = p4 / (1 - p1), tmp, d; for(i = 2; i <= n; i ++) { tmp = 0;d = a; for(j = 2; j <= i; j ++) { tmp = tmp * a + dp[1 - (i & 1)][j - 1] * b + (j <= k ? c : 0.0) ; d *= a; } tmp = tmp * a + c; dp[i & 1][1] = tmp / (1 - d); for(j = 2; j <= i; j ++) { dp[i & 1][j] = dp[1 - (i & 1)][j - 1] * b + dp[i & 1][j - 1] * a + (j <= k ? c : 0.0); } } printf("%.5f\n", dp[n & 1][m]); }}

 

 

转载地址:http://ydavx.baihongyu.com/

你可能感兴趣的文章
玩一玩微信公众号开发(一) 接入系统
查看>>
Dnslog在SQL注入中的利用
查看>>
影响程序员生涯的三个错误观念,你千万不要犯!
查看>>
可编程交换时代就在这里
查看>>
Optaplanner终于支持多线程并行运行 - Multithreaded incremental solving
查看>>
【死磕 Spring】----- IOC 之解析 bean 标签:解析自定义标签
查看>>
QT中VideoProbe的简介和实现
查看>>
VC解析XML--使用CMarkup类解析XML
查看>>
微服务太分散?使用Fundebug集中式bug监控
查看>>
从4个方面简单介绍SaaS
查看>>
你一写长文章就焦虑拖延?
查看>>
关于YoYo.Cms
查看>>
Collections,Synchronized
查看>>
apache服务器搭建过程中需要注意到的一些问题
查看>>
阿里云三维可视化使用初体验
查看>>
DexClassLoader的使用
查看>>
一个让我很不爽的外包项目——奔驰Smart2015新官网
查看>>
Web的结构组件
查看>>
数据库设计-基础-1-教务科研申报系统设计UML用例图
查看>>
centos7下别名(alias)的特殊用法
查看>>