Neutralzz的博客

我有自己的梦想和追求!

HDU 4405 Aeroplane chess(概率DP入门)

开始把dp[i] 设成了 从0到>=i的期望值。。。。然后差点跪了。。。确实是个水题。。不过头脑灵活一下。


思路:设dp[i] 为从i到>=n的期望值。

如果i有航班,dp[i] = dp[mark[i]];

如果有航班,dp[i] = sigma(dp[i+j]) / 6 + 1 ( 1<= j <=6)


代码:

#include<cstdio>
#include<algorithm>
#include<iostream>

using namespace std;
const int maxn = 100050;

double dp[maxn];
int mark[maxn];
int n,m;

void init(){
    dp[0] = 0;
    fill(mark,mark+maxn,-1);
    fill(dp,dp+maxn,0);
}

int main(){
    while(~scanf("%d%d",&n,&m)){
        if(n + m  == 0) break;
        init();
        int a,b;
        while(m--){
            scanf("%d%d",&a,&b);
            mark[a] = b;
        }
        for(int i=n-1;i>=0;i--){
            if(mark[i] != -1) dp[i] = dp[mark[i]];
            else{
                double tmp = 0;
                for(int j=1;j<=6;j++) tmp += dp[i+j];
                dp[i] = tmp / 6 + 1;
            }
        }

        printf("%.4f\n",dp[0]);
    }
    return 0;
}



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26572969/article/details/46825889
个人分类: DP
上一篇SGU 495 Kids and Prizes (概率DP入门)
下一篇POJ 3744 Scout YYF I(概率DP+数学)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭