关闭

【dp求期望值】POJ 3756

标签: go
540人阅读 评论(0) 收藏 举报
分类:

dp求期望

double dp[1024][111];//dp[i][j]第i round到j格的概率
bool stop[111];
int go[111];
int n;
int main(){
    while(scanf("%d",&n) !=-1){
        int i,j;
        int m;
        memset(go,0,sizeof(go));
        memset(stop,0,sizeof(stop));
        scanf("%d",&m);
        while(m--){
            int pos,num;
            scanf("%d%d",&pos,&num);
            go[pos]+=num;
        }
        scanf("%d",&m);
        while(m--){
            int pos,num;
            scanf("%d%d",&pos,&num);
            go[pos]-=num;
        }
        scanf("%d",&m);
        while(m--){
            int pos;
            scanf("%d",&pos);
            stop[pos] = true;
        }
        memset(dp,0,sizeof(dp));
        dp[0][0] = 1.0;
        double per = 1.0/6.0;
        for(i=0;i<1000;i++){
            for(j=0;j<n;j++){
                if(dp[i][j]>0){
                    for(int k=1;k<=6;k++){
                        int next = k+j;
                        if(next>n){
                            int res = next%n;
                            next = n-res;
                        }
                        if(stop[next]){
                            dp[i+2][next] += dp[i][j]*per;
                        } else {
                            next += go[next];
                            if(next>n){
                                int res = next%n;
                                next = n-res;
                            } else if(next<0)next =-next;
                            dp[i+1][next] += dp[i][j]*per;
                        }
                    }
                }
            }
        }
        double ans = 0;
        for(i=0;i<1000;i++){
            ans += dp[i][n]*i;
        }
        if(ans<eps)puts("Impossible");
        else
        printf("%.2lf\n",ans);
    }
    return 0;
}























0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:386173次
    • 积分:7638
    • 等级:
    • 排名:第2760名
    • 原创:412篇
    • 转载:27篇
    • 译文:0篇
    • 评论:39条
    最新评论
    other