建立方程后直接高斯消元,再把0的区间找出来计算,就可以过(因为实际上这样的复杂度是5次的,且常数小)
(当然这样的复杂度看上去并不太好,考虑优化)
可以发现最后一行的概率都可以用上一行来表示,那么代入上一行的方程后,发现又可以再次代入,最后就求出了第一行

 1 #include<bits/stdc++.h>
2 using namespace std;
3 int t,n,m,dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
4 double f[2005][2005];
5 int id(int x,int y){
6 if ((x<1)||(y<1)||(x>n)||(y>m))return 0;
7 return (x-1)*m+y;
8 }
9 double guess(){
10 for(int ii=n;ii;ii--){
11 for(int i=id(ii,1);i<=id(ii,m);i++){
12 double s=abs(f[i][i]);
13 for(int j=i+1;j<=id(ii,m);j++)s=max(s,abs(f[j][i]));
14 for(int j=i;j<=id(ii,m);j++)
15 if (s==abs(f[j][i])){
16 s=f[j][i];
17 for(int k=id(ii-1,1);k<=id(ii,m);k++)swap(f[j][k],f[i][k]);
18 swap(f[j][id(n,m)+1],f[i][id(n,m)+1]);
19 break;
20 }
21 for(int j=id(ii-1,1);j<=id(ii,m);j++)f[i][j]/=s;
22 f[i][id(n,m)+1]/=s;
23 for(int j=id(ii,1);j<=id(ii,m);j++){
24 if (j==i)continue;
25 s=f[j][i];
26 for(int k=id(ii-1,1);k<=id(ii,m);k++)f[j][k]-=f[i][k]*s;
27 f[j][id(n,m)+1]-=f[i][id(n,m)+1]*s;
28 }
29 }
30 if (ii==1)return f[1][id(n,m)+1];
31 for(int i=id(ii-1,1);i<=id(ii-1,m);i++)
32 for(int j=id(ii,1);j<=id(ii,m);j++){
33 for(int k=id(ii-1,1);k<=id(ii-1,m);k++)f[i][k]-=f[i][j]*f[j][k];
34 f[i][id(n,m)+1]-=f[i][j]*f[j][id(n,m)+1];
35 }
36 }
37 }
38 int main(){
39 while (scanf("%d%d",&n,&m)!=EOF){
40 if ((!n)&&(!m))return 0;
41 memset(f,0,sizeof(f));
42 for(int i=1;i<=n;i++)
43 for(int j=1;j<=m;j++)
44 f[id(i,j)][id(i,j)]=f[id(i,j)][id(n,m)+1]=-1;
45 for(int k=0;k<4;k++)
46 for(int i=1;i<=n;i++)
47 for(int j=1;j<=m;j++)
48 scanf("%lf",&f[id(i,j)][id(i+dx[k],j+dy[k])]);
49 f[id(n,m)][id(n,m)+1]=0;
50 printf("%.8f\n",guess());
51 }
52 }

[bzoj3317]First Knight的更多相关文章

  1. POJ2488A Knight's Journey[DFS]

    A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 41936   Accepted: 14 ...

  2. Knight Moves

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  3. HDU 1372 Knight Moves

    最近在学习广搜  这道题同样是一道简单广搜题=0= 题意:(百度复制粘贴0.0) 题意:给出骑士的骑士位置和目标位置,计算骑士要走多少步 思路:首先要做这道题必须要理解国际象棋中骑士的走法,国际象棋中 ...

  4. [宽度优先搜索] HDU 1372 Knight Moves

    Knight Moves Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  5. HDU 1372 Knight Moves (bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Othe ...

  6. POJ2488-A Knight's Journey(DFS+回溯)

    题目链接:http://poj.org/problem?id=2488 A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Tot ...

  7. UVA 439 Knight Moves --DFS or BFS

    简单搜索,我这里用的是dfs,由于棋盘只有8x8这么大,于是想到dfs应该可以过,后来由于边界的问题,TLE了,改了边界才AC. 这道题的收获就是知道了有些时候dfs没有特定的边界的时候要自己设置一个 ...

  8. 【POJ 2243】Knight Moves

    题 Description A friend of you is doing research on the Traveling Knight Problem (TKP) where you are ...

  9. hdu Knight Moves

    这道题实到bfs的题目,很简单,不过搜索的方向变成8个而已,对于不会下象棋的会有点晕. #include <iostream> #include <stdio.h> #incl ...

随机推荐

  1. 打开属性页,分别在Debug和Release下将其配置类型改为:静态库(.lib);

    右键工程->属性 配置类型里面的下拉菜单选择静态库

  2. Java生成6位数验证码

    public static String getCode() { return String.valueOf((int) ((Math.random() * 9 + 1) * 100000));} 生 ...

  3. 消息队列那么多,为什么建议深入了解下RabbitMQ?

    你为啥要在项目中选择xxx消息中间件? 提起消息队列,也许你的脑海里会不自觉地蹦出好多概念:JMS.Kafka.RocketMQ.AMQP.RabbitMQ.ActiveMQ.Pulsar.Redis ...

  4. 脚本注入1(boolean&&get)

    现在,我们回到之前,练习脚本支持的布尔盲注(get型). 布尔盲注的应用场景是查询成功和失败时回显不同,且存在注入点的地方. 这里以Less-8为例: 发现查询成功时,会显示:失败则无回显. 同时发现 ...

  5. 【Java虚拟机2】Java类加载机制

    前言 JAVA代码经过编译从源码变为字节码,字节码可以被JVM解读,使得JVM屏蔽了语言级别的限制.才有了现在的kotlin.Scala.Clojure.Groovy等语言. 字节码文件中描述了类的各 ...

  6. 【c++ Prime 学习笔记】目录索引

    第1章 开始 第Ⅰ部分 C++基础 第2章 变量和基本类型 第3章 字符串.向量和数组 第4章 表达式 第5章 语句 第6章 函数 第7章 类 第 Ⅱ 部分 C++标准库 第8章 IO库 第9章 顺序 ...

  7. “介绍一下自己吧”——记2020BUAA软工团队介绍和采访

    写在前面 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 团队作业-团队介绍和采访 团队介绍 团队名称 我们是 BUAA软软软件工程小队 ,简称 ...

  8. 人人都写过的5个Bug!

    大家好,我是良许. 计算机专业的小伙伴,在学校期间一定学过 C 语言.它是众多高级语言的鼻祖,深入学习这门语言会对计算机原理.操作系统.内存管理等等底层相关的知识会有更深入的了解,所以我在直播的时候, ...

  9. WebGL着色器渲染小游戏实战

    项目起因 经过对 GLSL 的了解,以及 shadertoy 上各种项目的洗礼,现在开发简单交互图形应该不是一个怎么困难的问题了.下面开始来对一些已有业务逻辑的项目做GLSL渲染器替换开发. 起因是看 ...

  10. Noip模拟21(持续翻车)2021.7.20

    读题总是读错是不是没救了... T1 Median 中位数:按顺序排列的一组数据中居于中间位置的数. 能用上的高亮符号都用上了... 当时忘了就离谱.... 理解什么是中位数(真是个憨憨)后就可以开始 ...