博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UESTC 1330 柱爷与远古法阵【高斯消元】
阅读量:5249 次
发布时间:2019-06-14

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

题目链接【http://acm.uestc.edu.cn/#/problem/show/1330】

题意:有一个长度为L(L <= 300)的长廊,有一人站在最左边,他要到最右边去,他每次可以走1 ~ 6 步,每一次走的步数是随机发生的。并且某些位置有传送门(a,b)表示a位置有个传送门,可以直接到达b,然后求出到达最右边的期望是多少?

题解:首先,我们先列出公式,设dp[i]表示从 i 点到达最右边的期望,则1、dp[L] =0 。2、如果a有传送门b那么dp[a] = dp[b] 。否则 dp[x] = (dp[x+1]+dp[x+2] + dp[x+y])/6+1;( x + y <= L && y <= 6)。化简后就得到,6 * dp[x] - dp[x+1] - dp[x+2] - ... - dp[x+y] == 6。那么我们一共可以列出L个方程,一共有L个未知量,只要用高斯消元解出来就可以了。

注意:1、每个点最多只有一个传送门,2、这道题存在无解的情况,3、这道题精度卡的很高。

#include
using namespace std;typedef long double LB;const LB eps = 1e-14;const int maxn = 350 + 15;LB a[maxn][maxn], x[maxn];int Guess(int equ, int var){ int i, j, k, col, max_r; for(k = 1, col = 1; k <= equ && col <= var; k++, col++) { max_r = k; for(i = k + 1; i <= equ; i++) if(fabs(a[i][col] ) > fabs(a[max_r][col])) max_r = i; if(fabs(a[max_r][col]) < eps ) return 0;//无解 if(k != max_r) { for(j = col; j <= var; j++) swap(a[k][j], a[max_r][j]); swap(x[k], x[max_r]); } x[k] /= a[k][col]; for(j = col + 1; j <= var; j++) a[k][j] /= a[k][col]; a[k][col] = 1; for(i = 1; i <= equ; i++) if(i != k) { x[i] -= x[k] * a[i][col]; for(j = col + 1; j <= var; j++) a[i][j] -= a[k][j] * a[i][col]; a[i][col] = 0; } } return 1;}int N, M;int f[maxn];//表示某点有没有传送门int main (){ scanf("%d %d", &N, &M); memset(a, 0, sizeof(a)); for(int i = 1; i <= N; i++) f[i] = 0; for(int i = 1; i <= M; i++) { int u, v; scanf("%d %d", &u, &v); f[u] = v; } for(int i = 1; i < N; i++) { a[i][i] = 6.0; if(f[i]) { a[i][f[i]] = -6.0; continue; } x[i] = 6.0; for(int j = 1; j <= 6; j++) { if(i + j <= N) a[i][i + j] -= 1.0; else a[i][i] -= 1.0; } } a[N][N] = 1.0, x[N] = 0; if(!Guess(N, N)) printf("-1\n"); else printf("%.12Lf\n", x[1]); return 0;}

  

转载于:https://www.cnblogs.com/pealicx/p/7603493.html

你可能感兴趣的文章
使用&nbsp;SharedPreferences 分类: Andro...
查看>>
TLA+(待续...)
查看>>
题解: [GXOI/GZOI2019]与或和
查看>>
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
vue项目中使用百度统计
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
Java项目xml相关配置
查看>>
三维变换概述
查看>>
第三次作业
查看>>
vue route 跳转
查看>>