zoj 3329 One Person Game(概率DP基础)

题意:
。。。
思路:
E[i] 为当前分数为i时,到游戏结束时掷骰次数的期望。
E[i]=PkEi+k+P0E0,P0=1/(k1+k2+k3)
我们要求的是E[0],,边界是 E[j]=0,j>n
假设E[i] = ai * E[0] + bi
每次可以把递推式(1)中的E[i+k]替换成 ai+kE0+bi+k
然后求得ai和bi
最后求解,E[0] = b0/(1-a0)
更详细的题解

int n, k1, k2, k3, aa, bb, cc;
double a[521], b[521], p[20], p0;

double solve() {
    int ks = k1 + k2 + k3;
    fill(a, a+520, 0);fill(b, b+520, 0);
    urep(i, n, 0) {
        int last = min (i+ks, n);
        rep(j, 3, ks) {
            a[i] += p[j] * a[i+j];
            b[i] += p[j] * b[i+j];
        }
        a[i] += p0, b[i] += 1;
    }
    return b[0]/(1-a[0]);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值