博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
light oj 1151 - Snakes and Ladders 高斯消元+概率DP
阅读量:4982 次
发布时间:2019-06-12

本文共 1126 字,大约阅读时间需要 3 分钟。

思路:

在没有梯子与蛇的时候很容易想到如下公式:

dp[i]=1+(∑dp[i+j])/6

但是现在有梯子和蛇也是一样的,初始化p[i]=i;

当有梯子或蛇时转移为p[a]=b;

这样方程变为:

dp[i]=1+(∑dp[p[i+j]])/6

再就是注意当i+j>100时,停在原地不变。

代码如下:

1 #include
2 #include
3 #include
4 #include
5 #include
6 #define M 105 7 #define eps 1e-6 8 using namespace std; 9 double ans[M],an[M][M];10 int p[M];11 void GAUSS()12 {13 int i,j,t,k;14 for(i=1;i<=100;i++){15 t=i;16 for(j=i+1;j<=100;j++)17 if(an[t][i]
eps){25 double tt=an[j][i]/an[i][i];26 for(k=i;k<=101;k++)27 an[j][k]=an[j][k]-an[i][k]*tt;28 }29 }30 }31 for(i=100;i>=1;i--){32 for(j=100;j>i;j--){33 an[i][101]-=an[i][j]*ans[j];34 }35 if(fabs(an[i][i])>eps)36 ans[i]=an[i][101]/an[i][i];37 if(fabs(ans[i])
100) an[i][i]-=1.0;48 else an[i][p[i+j]]+=-1.0; //感开始没有+,一直错啊…………49 }50 }51 GAUSS();52 }53 int main()54 {55 int t,ca=0,n,m,a,b;56 scanf("%d",&t);57 while(t--){58 scanf("%d",&n);59 for(int i=1;i<=100;i++) p[i]=i;60 for(int i=0;i
View Code

 

 

 

 

转载于:https://www.cnblogs.com/xin-hua/p/3350533.html

你可能感兴趣的文章