LightOJ 1030 Discovering Gold 概率

来源:互联网 发布:november rain 知乎 编辑:程序博客网 时间:2024/05/29 18:34

一道比较简单的概率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[n] = a[n];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;}


0 0