hdu 4586 Play the Dice 数学 概率
2015-05-26 08:55
429 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4586
题意:
给一个n面的骰子,每一面有一个分数,掷到的话可以得到那个分数
其中有m个面,当你掷到这些面的时候可以再掷一次
求得分的数学期望
思路:
每轮得分的期望 乘以 轮数的期望
每轮得分的期望 = 各个面的平均分 = sum / n;
轮数期望 = 1 + m/n + (m/n)^2 + ... = n - m / n
所以ans = sum / (n - m) ,其中 n!=m
要特判一些情况
如果 n == m 并且 各个面的分数不全为零 那么得分为INF
如果 n == m 并且 各个面的分数全为零 那么得分为0.00
思路上,注意
可以重掷的面的分权是大是小并不影响得分的期望
题意:
给一个n面的骰子,每一面有一个分数,掷到的话可以得到那个分数
其中有m个面,当你掷到这些面的时候可以再掷一次
求得分的数学期望
思路:
每轮得分的期望 乘以 轮数的期望
每轮得分的期望 = 各个面的平均分 = sum / n;
轮数期望 = 1 + m/n + (m/n)^2 + ... = n - m / n
所以ans = sum / (n - m) ,其中 n!=m
要特判一些情况
如果 n == m 并且 各个面的分数不全为零 那么得分为INF
如果 n == m 并且 各个面的分数全为零 那么得分为0.00
思路上,注意
可以重掷的面的分权是大是小并不影响得分的期望
#include <iostream> #include <cstdlib> #include <cstdio> #include <algorithm> #include <iostream> #include <cstring> using namespace std; const int maxn = 10010; int a[maxn]; int b[maxn]; int main() { //freopen("in.txt", "r", stdin); int n, m; while(scanf("%d", &n) == 1) { int sum = 0; for(int i = 0; i < n; i++) { scanf("%d", &a[i]); sum = sum + a[i]; } scanf("%d", &m); for(int j = 0; j < m; j++) scanf("%d", &b[j]); if(n == m) { if(sum == 0) printf("0.00\n"); else printf("inf\n"); } else { double ans = (double)sum / (n - m); printf("%.2f\n", ans); } } }
相关文章推荐
- HDU 4586 Play the Dice (数学,概率,等比公式,极限)
- HDU 4586 Play the Dice(概率+期望)
- HDU 4586 Play the dice(概率题,推公式)
- 概率dp求期望-hdu-4586-Play the Dice
- HDU 4586 Play the dice (数学期望)
- HDU 4586 Play the Dice 数学期望
- HDU 4586 Play the Dice 概率dp+等比数列 级数
- Play the Dice hdu 4586 数学期望的问题
- HDU 4586:Play the Dice (数学)
- hdu 4586 Play the Dice (概率+等比数列)
- hdu 4586 Play the Dice(概率dp)
- HDU 4586 Play the Dice(概率入门)
- HDU-4586 Play the Dice(概率期望)
- HDU 4518 Play the Dice(数学 概率 期望)
- hdu 4586 Play the Dice (概率+等比数列)
- hdu 4586 Play the Dice(概率期望题)
- HDU-4586 Play the Dice (数学)
- HDU 4586 Play the Dice (数学,公式推导)
- HDU 4586 Play the Dice
- Play the Dice - HDU 4586 期望dp