博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[poj2151]Check the difficulty of problems概率dp
阅读量:5052 次
发布时间:2019-06-12

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

解题关键:主要就是概率的推导以及至少的转化,至少的转化是需要有前提条件的。

转移方程:$dp[i][j][k] = dp[i][j - 1][k - 1]*p + dp[i][j - 1][k]*(1 - p)$ 其中$dp[i][j][k]$表示第$i$个人前j题恰好ac了$k$题.然后用前缀和处理一下最后的结果。

每队至少AC一题 反向考虑,用1-每队没A题的概率,再用乘法原理结合一下。

冠军队至少AC$n-1$题,也就是存在一支队伍AC数>=n-1,依然反向考虑,不过是在每队AC至少一题的条件下,从而求出每队AC数>=1,<n-1,再用前面的概率减去此概率即可。

复杂度:1000*30*30

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 typedef long long ll; 9 double p[1002][32],dp[1002][32][32],s[1002][32];10 int main(){11 int m,t,n;12 ios::sync_with_stdio(0);13 while(cin>>m>>t>>n&&(n||m||t)){14 for(int i=1;i<=t;i++){15 for(int j=1;j<=m;j++){16 cin>>p[i][j];17 }18 }19 20 for(int i=1;i<=t;i++){21 dp[i][0][0]=1;22 for(int j=1;j<=m;j++){23 dp[i][j][0]=dp[i][j-1][0]*(1-p[i][j]);//类似杨辉三角的推法,注意按照怎样的顺序才能推出全部 24 }25 }26 27 for(int i=1;i<=t;i++){28 for(int j=1;j<=m;j++){29 for(int k=1;k<=j;k++){ //注意控制变量范围,保证有意义 30 dp[i][j][k]=dp[i][j-1][k-1]*p[i][j]+dp[i][j-1][k]*(1-p[i][j]);31 }32 }33 }34 for(int i=1;i<=t;i++){35 for(int j=0;j<=m;j++){36 s[i][j]=s[i][j-1]+dp[i][m][j];37 }38 }39 40 double ans1=1.0,ans2=1.0,t1;41 for(int i=1;i<=t;i++) t1=1-s[i][0],ans1*=t1;42 for(int i=1;i<=t;i++) t1=s[i][n-1]-s[i][0],ans2*=t1;43 printf("%.3f\n",ans1-ans2);44 45 46 47 }48 }

 

转载于:https://www.cnblogs.com/elpsycongroo/p/7451010.html

你可能感兴趣的文章
数据库之 :分页技术:之点击一次取一次数据
查看>>
JavaScript
查看>>
VS2008开发Windows Mobile6环境搭建及模拟器联网问题图解
查看>>
V2019 Super DSP3 Odometer Correction Vehicle List
查看>>
Python 3.X 练习集100题 05
查看>>
4sumii
查看>>
手写API接口测试使用的两个函数
查看>>
canvas
查看>>
实验三观后感
查看>>
Java系列学习(零)-写在前面的话
查看>>
Python模块
查看>>
”win7笔记本共享无线网络,手机连接成功却无法上网“的解决之道【亲身经历】...
查看>>
今时不同往日:VS2010十大绝技让VS6叹服
查看>>
设计器 和后台代码的转换 快捷键
查看>>
在线视频播放软件
查看>>
用代码生成器生成的DAL数据访问操作类 基本满足需求了
查看>>
28初识线程
查看>>
Monkey测试结果分析
查看>>
Sublime Text 3 设置
查看>>
poodle attack
查看>>