UVA 11021(概率DP)
2016-03-07 15:57
253 查看
题目链接:UVA 11021
解题思路:
这题算是一道很经典的概率入门题了吧,不过首先得知道可以用pow函数。虽然题目中讲的是K个毛球,但是其实可以考虑一个毛球的情况,之后作K次方即为答案。状态dp[i]表示一个毛球在第 i 天之前死光的概率,因为一直毛球有N种繁衍后代的可能性,dp[i]的值为N种可能性在 i-1 天内死光的可能性之和,状态转移方程为:
dp[i] = p[0]*dp[i-1]^0 + p[1]*dp[i-1]^1 + … + p[N-1]*dp[i-1]^(N-1)
代码:
解题思路:
这题算是一道很经典的概率入门题了吧,不过首先得知道可以用pow函数。虽然题目中讲的是K个毛球,但是其实可以考虑一个毛球的情况,之后作K次方即为答案。状态dp[i]表示一个毛球在第 i 天之前死光的概率,因为一直毛球有N种繁衍后代的可能性,dp[i]的值为N种可能性在 i-1 天内死光的可能性之和,状态转移方程为:
dp[i] = p[0]*dp[i-1]^0 + p[1]*dp[i-1]^1 + … + p[N-1]*dp[i-1]^(N-1)
代码:
#include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int K,n,m; double a[1005],dp[1005],ans; int main() { int T,t=0; scanf("%d",&T); while(t<T) { scanf("%d %d %d",&n,&K,&m); for(int i=0;i<n;i++) scanf("%lf",&a[i]); dp[1]=a[0]; for(int i=2;i<=m;i++) { dp[i] = a[0]; for(int j=1;j<n;j++) { dp[i] += a[j] * pow(dp[i-1], j); } } printf("Case #%d: %.7lf\n",++t, pow(dp[m], K)); } return 0; }
相关文章推荐
- C/C++服务器架构机制设计总结
- 小结IE6的坑
- Win10开机声音没有了怎么办?Win10开机声音设置方法图文详解
- CentOS下的Daemon进程
- 日志分析系统ELK(业务日志)
- Android事件分发机制
- ensemble 总结 Kaggle-Ensemble-Guide
- Uva12118——Inspector's Dilemma
- linux 命令 date
- arc下使用mrc
- {}+[]与console.log({}+[])结果不同?从JavaScript的大括号谈起
- 蓝桥杯 最短路 spfa
- activemq安全设置
- Android加载Gif和ImageView的通用解决方案:android-gif-drawable(1)
- SAP 供应链需求计划管理研讨会
- 如何生成一个合适的hashcode方法
- CSDN学院系统升级公告
- C#代码片段 在工作线程中刷新主界面线程的进度条显示
- 使用高德定位SDK实时定位
- java字符串加密解密