设 dpi,j 表示在前 i 轮,第 j 号牌释放过技能的概率。
设 fi,j 表示在第 i 轮,前 j 号牌释放过技能的概率。
那么 fi,j=fi,j−1∗(dpi−1,j+(1−pj)−dpi−1,j×(1−pj)),
dpi,j=dpi−1,j+(1−dpi−1,j)×fi,j−1×pj。
附上代码:
for(int i=1;i<=m;i++){
f[i][0]=1;
for(int j=1;j<=n;j++){
double now=(1-dp[i-1][j])*f[i][j-1]*p[j];
dp[i][j]=dp[i-1][j]+now;
f[i][j]=f[i][j-1]*(dp[i-1][j]+(1-p[j])-dp[i-1][j]*(1-p[j]));
ans+=now*a[j];
}
}
萌新想知道这个做法哪里假了/kk