博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
期望dp+高斯消元优化——uvalive4297好题
阅读量:4349 次
发布时间:2019-06-07

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

非常好的题!期望+建矩阵是简单的,但是直接套高斯消元会T

所以消元时要按照矩阵的形态 进行优化

#include
using namespace std; const int maxn = 55;const int maxm = 55*55;const double esp = 1e-8;int n,m,r,dir[4][2]={
{
1,0},{
0,1},{-1,0},{
0,-1}};double a[maxm][maxm],b[maxm],p[maxn][maxn][4];//优化后的高斯消元,考虑矩阵的形态,我们只要求出a[0][0]和b[0]的值//并且a[r-1][r-1]和b[r-1]是确定的,那么就可以从r-1行往上消元//不断把主元消去即可,主元前面的未知项的系数不用考虑直接修改即可//和主元i相关的行只有向上的m行,同时主元所在的行未知项系数也只有m个//所以 复杂度为 O(nm^3) double gauss(){ for(int i=r-1;i>=0;i--){ int down=max(0,i-m); for(int j=i-1;j>=down;j--){
//一行行往上消元 double rate=a[j][i]/a[i][i]; for(int k=i;k>=down;k--) a[j][k]-=a[i][k]*rate; b[j]-=rate*b[i]; } } return b[0]/a[0][0];}int main(){ while(scanf("%d%d",&n,&m),n){ memset(a,0,sizeof a); memset(b,0,sizeof b); memset(p,0,sizeof p); for(int k=0;k<4;k++) for(int i=0;i
=n || y<0||y>=m)continue; a[id][x*m+y]-=p[i][j][k]; } } b[r-1]=0; printf("%lf\n",gauss()); }}

 

转载于:https://www.cnblogs.com/zsben991126/p/11061924.html

你可能感兴趣的文章
MongoDB 备份与还原
查看>>
Oracle启动与关闭数据库实例
查看>>
Spring day01
查看>>
hihocoder-1740-替换函数
查看>>
Codeforce Round #219 Div2
查看>>
option value的值可以有空格 再试试吧
查看>>
.htaccess to httpd.conf
查看>>
node.js 基础学习笔记2
查看>>
hadoop中常见元素的解释
查看>>
BZOJ-1497 最大获利
查看>>
4-4 修改文件
查看>>
并发编程(十):AQS
查看>>
条件注释判断浏览器版本<!--[if lt IE 9]>
查看>>
Comparison among several SGD derivation
查看>>
ModelAndView同时向页面传递多个参数
查看>>
samba 配置参数详解
查看>>
python基础09_文件操作
查看>>
mvn install selenium依赖包
查看>>
关于SQL的相关笔记【长期更新,只发一帖】
查看>>
linux awk命令详解
查看>>