2004 TCCC OL1 div1 1000(概率dp,简单)
来源:互联网 发布:如何进行数据预处理 编辑:程序博客网 时间:2024/06/07 11:32
题意:
有一片水塘,用string来表示
比如”.XX”(保证第一个位置是’.’),表示以该形式向右边无穷拓展”.XX.XX.XX····”(X表示障碍物
你站在水塘左边,准备打水漂,石子碰到障碍物就沉了。。
石子有一个maxDist属性,每一次弹射时在[1, maxDist]区间内随机选一个距离。每弹一次maxDist减1,也就是在不碰到任何障碍物的情况下,石子最多弹射maxDist次(不算最初到0的那次
石子先打到0,然后开始弹。。
求石子不碰到障碍物的概率
思路:
设当前在i,maxDist = d
P(i, j) 表示在i位置,maxDist为j时的不碰到石子的概率。。
那么 P(i, d) = P( (i+1)%n, d-1) + … + P( (i+d)%n, d-1)
如果i位置是障碍物,直接为0
const int Maxn = 100;int n;double dp[Maxn+5][Maxn+5];class RockSkipping{ public: double probability(string pads, int maxDist) { n = pads.length(); for (int i=0;i<n;++i) dp[i][1] = (pads[i] == '.' && (pads[(i+1)%n] == '.')); //for (int i=0;i<n;++i) cout << i << ' ' << 1 << ": " << dp[i][1] << endl; for (int k=2;k<=maxDist-1;++k) { double p = 1.0/k; for (int i=0;i<n;++i) { if (pads[i] != '.') { dp[i][k] = 0; continue; } double t = 0; for (int j=1;j<=k;++j) { t += dp[(i+j)%n][k-1] * p; } dp[i][k] = t; } } double ret = 0, p = 1.0/maxDist; for (int i=1;i<=maxDist;++i) ret += dp[i%n][maxDist-1] * p; return ret*100; }}
0 0
- 2004 TCCC OL1 div1 1000(概率dp,简单)
- 2004 TCO QR3 div1 1000(简单条件概率)
- Topcoder SRM 651 div1 250 题解 (概率dp)
- srm 152 div1 500(简单概率计算)
- BadNeighbors (TCCC '04 Round 4 Div1 250)
- srm 181 div1 1000(状压dp)
- POJ 3071 Football(简单 概率DP)
- hdu 4405(概率dp简单题)
- hdu3853(简单概率dp)
- DP ChessMetric 【TCCC'03 Round 4】
- hdu 3835 简单概率dp
- hdu 3853 概率DP 简单
- hdu 4405 简单概率dp
- UVA 6624(简单概率dp)
- BadNeighbors - 2004 TCCC Round 4
- 2017暑假集训 div1 DP(1)
- 2017暑假集训 div1 DP(2)
- poj 2096 Collecting Bugs 概率DP求期望(简单)
- 软件工程面试题
- 路由协议:学习小结-本机路由与转发路由
- Struts2教程7:上传任意多个文件
- 一步一步跟我学习lucene(2)---lucene的各种Field及其排序
- Infinite recursion (StackOverflowError)解决方案@JsonBackReference
- 2004 TCCC OL1 div1 1000(概率dp,简单)
- 麻辣烫
- 奇怪的排序
- ACM中java的使用
- 关于Unity协同程序的全面解析
- 使用ADF BC AM创建SOAP WebService
- UVA 10294 Arif in Dhaka (First Love Part 2) Polya计数
- AttachCurrentThread报错
- ARM寄存器