LightOJ 1030 Discovering Gold 概率
2015-09-22 20:00
459 查看
一道比较简单的概率dp, dp[i]表示取第i个坑里的金子,总共可以得到的金子的期望值, dp[i] = weight[i] + (dp[i + 1] + dp[i + 2] + dp[i + 3] + dp[i + 4] + dp[i + 5] + dp[i + 6]) / 6,注意当最后不足六个的时候要特殊处理。最后dp[1] 就是最终结果。
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; int main() { int t; scanf("%d", &t); int a[110]; double dp[110]; int CASE = 1; while (t--) { int n; scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", a + i); } dp = a ; for (int i = n - 1; i > 0; i--) { double div = min(6, n - i); double sum = 0; for (int j = 1; j <= div; j++) { sum += dp[i + j]; } dp[i] = sum / div + a[i]; sum += dp[i]; } printf("Case %d: %lf\n", CASE++, dp[1]); } return 0; }