[bzoj3317]First Knight
建立方程后直接高斯消元,再把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的更多相关文章
- POJ2488A Knight's Journey[DFS]
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 41936 Accepted: 14 ...
- Knight Moves
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- HDU 1372 Knight Moves
最近在学习广搜 这道题同样是一道简单广搜题=0= 题意:(百度复制粘贴0.0) 题意:给出骑士的骑士位置和目标位置,计算骑士要走多少步 思路:首先要做这道题必须要理解国际象棋中骑士的走法,国际象棋中 ...
- [宽度优先搜索] HDU 1372 Knight Moves
Knight Moves Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- HDU 1372 Knight Moves (bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Othe ...
- POJ2488-A Knight's Journey(DFS+回溯)
题目链接:http://poj.org/problem?id=2488 A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Tot ...
- UVA 439 Knight Moves --DFS or BFS
简单搜索,我这里用的是dfs,由于棋盘只有8x8这么大,于是想到dfs应该可以过,后来由于边界的问题,TLE了,改了边界才AC. 这道题的收获就是知道了有些时候dfs没有特定的边界的时候要自己设置一个 ...
- 【POJ 2243】Knight Moves
题 Description A friend of you is doing research on the Traveling Knight Problem (TKP) where you are ...
- hdu Knight Moves
这道题实到bfs的题目,很简单,不过搜索的方向变成8个而已,对于不会下象棋的会有点晕. #include <iostream> #include <stdio.h> #incl ...
随机推荐
- JavaScript数组 几个常用方法
前言 数组方法有太多了,本文记录一些本人容易记错的一些数组方法,用于巩固及复习. 后续会慢慢的将其他数组方法添加进来. 善用数组方法可以使数据处理变的优雅且简单. 那下面让我们开始吧: filter( ...
- 详解package-lock.json的作用
目录 详解package-lock.json package-lock.json的作用 版本号的定义规则与前缀对安装的影响 改动package.json后依旧能改变项目依赖的版本 当前项目的真实版本号 ...
- dubbo注册中心占位符无法解析问题(二)
dubbo注册中心占位符无法解析问题 前面分析了dubbo注册中心占位符无法解析的问题. 并给出了2种解决办法: 降低mybatis-spring的版本至2.0.1及以下 自定义MapperScann ...
- java定时任务调度框架
java定时任务目前主要有三种: Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行,但不能在 ...
- 【UE4 C++】Print、Delay、ConsoleCommand
基于UKismetSystemLibrary PrintString /** * Prints a string to the log, and optionally, to the screen * ...
- 【UE4 设计模式】设计模式一些概念
定义 设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用设计模式是为了重用代码.让代码更容易被他人理解.保证代码可靠性. 四人帮 GOF ( Gang of Four ...
- Coursera Deep Learning笔记 序列模型(二)NLP & Word Embeddings(自然语言处理与词嵌入)
参考 1. Word Representation 之前介绍用词汇表表示单词,使用one-hot 向量表示词,缺点:它使每个词孤立起来,使得算法对相关词的泛化能力不强. 从上图可以看出相似的单词分布距 ...
- [技术博客]Django框架-后端的搭建
目录 Django框架-后端的搭建 前言 环境的部署 项目的创建 app的使用 创建app 修改配置文件 app中数据表的构建 前端接口 接口的路径 运行服务器 验证后端 Django框架-后端的搭建 ...
- the Agiles Scrum Meeting 1
会议时间:2020.4.9 20:00 1.每个人的工作 今天已完成的工作 前端 学习JavaScript.Vue.ElementUI相关知识 issues:预习任务-前端:JavaScript 预习 ...
- objdump--反汇编查看
转载:objdump命令_Linux objdump 命令用法详解:显示二进制文件信息 (linuxde.net) objdump命令 编程开发 objdump命令是用查看目标文件或者可执行的目标文件 ...