建立线段树,设$f[x][l][r]$表示当前考虑$x$点,最左端是$l$,最右端是$r$的最少代价。

如果$a$在$x<<1$,$d$在$x<<1|1$,

设$g[a][c]=\min(f[x<<1][a][b]+w[b][c])$,

则$f[x][a][d]=\min(g[a][c]+f[x<<1|1][c][d])$。

对于$a$在$x<<1|1$,$d$在$x<<1$的情况可以类似处理。

时间复杂度$O(n^3)$。

对于空间上的优化,因为对于同一深度的每个$x$来说,其有效的$l,r$的取值区间互不相交,所以可以省去$x$这一维。

空间复杂度$O(n^2)$。

#include<cstdio>
const int N=515,inf=~0U>>2;
int K,n,m,m2,i,j,l,r,mid,x,y,z,ans,w[N][N],f[N][N],g[N][N],h[N][N];
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline void up(int&a,int b){if(a>b)a=b;}
int main(){
read(K);n=1<<K;
for(i=0;i<n;i++)for(j=0;j<n;j++)read(w[i][j]);
m=1;
while(K--){
m2=m;m<<=1;
for(l=0;l<n;l+=m){
r=l+m,mid=l+m2;
for(x=l;x<mid;x++)for(z=mid;z<r;z++){
g[x][z]=inf;
for(y=l;y<mid;y++)up(g[x][z],f[x][y]+w[y][z]);
}
for(x=mid;x<r;x++)for(z=l;z<mid;z++){
g[x][z]=inf;
for(y=mid;y<r;y++)up(g[x][z],f[x][y]+w[y][z]);
}
for(x=l;x<mid;x++)for(z=mid;z<r;z++){
h[x][z]=inf;
for(y=mid;y<r;y++)up(h[x][z],g[x][y]+f[y][z]);
}
for(x=mid;x<r;x++)for(z=l;z<mid;z++){
h[x][z]=inf;
for(y=l;y<mid;y++)up(h[x][z],g[x][y]+f[y][z]);
}
for(x=l;x<r;x++)for(y=l;y<r;y++)f[x][y]=inf;
for(x=l;x<mid;x++)for(y=mid;y<r;y++)f[x][y]=h[x][y];
for(x=mid;x<r;x++)for(y=l;y<mid;y++)f[x][y]=h[x][y];
}
}
ans=inf;
for(i=0;i<n;i++)for(j=0;j<n;j++)up(ans,f[i][j]);
return printf("%d",ans),0;
}

  

最新文章

  1. [LeetCode] Maximal Square 最大正方形
  2. 关于#define for if(false);else for
  3. 基于Yahoo网站性能优化的34条军规及自己的见解
  4. ios企业应用部署
  5. WCF框架处理流程初探
  6. 使用VirtualBox进行端口转发 连接数据库
  7. Linux3:more、which、find、chmod、tar、diff、grep、ps、netstat、uname
  8. win环境变量立即生效
  9. Swift3.0语言教程获取C字符串
  10. thinkphp3.23整合phpexcel
  11. linux 虚拟文件系统----------Virtual File System VFSkky
  12. centos redis 安装
  13. HDU 3362 Fix(状压dp)
  14. 【小错误】WPF代码报错:未将对象引用设置到对象的实例。
  15. LeetCode之“链表”:Intersection of Two Linked Lists
  16. centos7只rsync+inotify
  17. 集合基本操作 Python DAY2
  18. 【ASP.NET MVC系列】浅谈ASP.NET MVC资源过滤和授权
  19. pyqt text browser 设置文本
  20. 【JVM底层策略 一】GC roots如何判断对象不可达

热门文章

  1. notifyDataSetInvalidated和notifyDataSetChanged有什么区别
  2. 瞧一瞧迷一般的SQLDA
  3. 在ubuntu上搭建开发环境1---在windows7的基础上在安装ubuntu(双系统)
  4. 判断一个类到底是从哪个jar包中调用的工具类
  5. soapUI 使用Property
  6. Ubuntu 上安装 MongoDB
  7. [Liferay6.2]Connect to ajax.googleapis.com …… timed out
  8. 小甲鱼PE详解之IMAGE_DOS_HEADER结构定义即各个属性的作用(PE详解01)
  9. opengl常用函数
  10. Eclipse配置Lifery SDK步骤与错误解决。