思路:
获得第i(i = 0, 1, ..., n - 1)件物品的概率仅由公式p / (1 << i)决定,所以获得这i件物品之间是相互独立的。迭代计算获得所有i件物品的期望再求和即可。不要被题目中的树形结构所蒙蔽。
实现:
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 int p, q, n; 6 7 double get_item(int i) 8 { 9 int pi = i < 7 ? p / (1 << i) : 0; 10 double tmp = 1; 11 double E = 0; 12 for (int j = 0; j <= 100; j++) 13 { 14 E += tmp * (j + 1) * pi * 0.01; 15 if (pi == 100) 16 return E; 17 tmp *= 1 - pi * 0.01; 18 pi += q; 19 if (pi >= 100) 20 { 21 pi = 100; 22 } 23 } 24 return E; 25 } 26 27 int main() 28 { 29 double ans = 0; 30 cin >> p >> q >> n; 31 for (int i = 0; i < n; i++) 32 { 33 ans += get_item(i); 34 } 35 printf("%.2lf ", ans); 36 return 0; 37 }