首页 > 其他 > 详细

LightOJ 1030 Discovering Gold(概率DP)题解

时间:2019-03-09 14:20:26      阅读:136      评论:0      收藏:0      [点我收藏+]

题意:1~n每格都有金子,每次掷骰子,掷到多少走几步,拿走那格的金子,问你金子的期望

思路:dp[i]表示从i走到n金子的期望,因为每次最多走1<=x<=6步,所以dp[i] = a[i] + sum(1 / x * dp[j])

代码:

#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<vector>
#include<string>
#include<cstdio>
#include<cstring>
#include<sstream>
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
const int maxn = 100 + 10;
const int MOD = 998244353;
const int INF = 0x3f3f3f3f;
int a[maxn];
double dp[maxn];    //从i开始走到n的期望
int main(){
    int n, ca = 1, t;
    scanf("%d", &t);
    while(t--){
        scanf("%d", &n);
        for(int i = 1; i <= n; i++)
            scanf("%d", &a[i]);
        dp[n] = a[n];
        for(int i = n - 1; i >= 1; i--){
            dp[i] = a[i];
            for(int j = i + 1; j <= min(i + 6, n); j++){
                dp[i] += 1.0 / min(6, n - i) * dp[j];
            }
        }
        printf("Case %d: %.8lf\n", ca++, dp[1]);
    }

    return 0;
}

 

LightOJ 1030 Discovering Gold(概率DP)题解

原文:https://www.cnblogs.com/KirinSB/p/10500511.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!