建立线段树,设$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;
}

  

BZOJ4707 : B君的技巧的更多相关文章

  1. 新年之际,盘点一些APP开发技巧

    (原文:Reader Submissions - New Year's 2015 作者:Mattt Thompson 译者:培子 校对:蓝魂) 回顾过去一年发生在我们身边的事情时,有一点不得不提:对苹 ...

  2. 小技巧-Try Catch

    与多线程,业务逻辑等比较复杂的功能打交道时,免不了对部分有可能产生不可预期的代码进行异常捕获. 这种异常可能不处理,比如: try { } catch {} 但是如果一旦发生异常,在程序调试的时候,发 ...

  3. 关于html/css的一些小技巧之hack掉"margin-top"层叠问题

    身为小前端菜鸟一枚,忽然听到这样一则传言~~ 心情久久不能平复,想到前几日,开通了博客君,特来此寻找存在feeling~ 旨在造福普罗大众(更多前端小菜鸟) 话不多说, 我们步入正题,今天来给大家分享 ...

  4. MySQL优化技巧【持续更新】

    前言 应用程序或web网页有时慢的像蜗牛爬似的,可能是网络原因,可能是系统架构原因,还有可能是数据库原因.那么如何提高数据库SQL语句执行速度呢?下面是积累的一些优化技巧,望对君有用. 正文 1.比较 ...

  5. 池建强 博客 Mac使用技巧 第一季

    第1天: 今天推送的Mac技巧: 使用OS X,我们可以充分利用系统提供的多个Space,把不同的程序放到不同的Space,让我们的系统更有扩展性.如何增加Space呢?四指上推,在桌面的最上方会出现 ...

  6. 【前端阅读】——《活用PHP、MySQL建构Web世界》摘记之设计技巧

    二.设计技巧 Programming的习惯因人而异,这里只提供一些经验,可以参考. 1.利用Include模块化你的程序代码 Include函数基本上说:就像是把另一个文件(HTML或者PHP程序)读 ...

  7. PostgreSQL 图形化客户端工具的使用技巧你都get了吗?

    PostgreSQL 数据库作为目前功能较强大的开源数据库,得到了广泛应用.其中,TSA就用到了这款数据库来存储处理后的一些业务数据.虽然PostgreSQL自身提供了命令行交互式客户端工具psql, ...

  8. 推荐几个不错的console调试技巧

    在我们的日常前端开发中,使用最频繁的莫过于使用console.log在浏览器的控制台中打印出我们需要调试的信息,但是大部分人可能跟之前的我一样,没有意识到其实console除了log方法以外,还有很多 ...

  9. 最新 学霸君java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.学霸君等10家互联网公司的校招Offer,因为某些自身原因最终选择了学霸君.6.7月主要是做系统复习.项目复盘.LeetCo ...

随机推荐

  1. 20145206邹京儒《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)

    20145206<Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDEA) 实验内容及步骤 1.使用JDK编译.运行简单的Java程序: 建立实验目录: 在IDEA ...

  2. hdu 1711Number Sequence

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 数字KMP,原来还能这么用 #include<stdio.h> ],b[]; ]; ...

  3. 在python多进程中使用manager和Barrier

    注意:Barrier是PYTHON3才有的功能,在2中无法测试. #!/usr/bin/env python # -*- coding: utf-8 -*- import multiprocessin ...

  4. php获取文件夹下面的文件列表和文件夹列表

    function getDir($dir) { $dirArray[] = NULL; if (false != ($handle = opendir( $dir ))) { $i=0; while ...

  5. hdu 4389 数位dp

    求区间内满足x%fx==0的数的个数,fx为该数各个位数上的数字之和Sample Input21 1011 20 Sample OutputCase 1: 10Case 2: 3 大小不是你想开,想开 ...

  6. 运行在linux上的mysql常用命令

    mysql的注释:--或者# 1.mysql服务进程的命令 service mysqld start;#启动mysql服务 service mysqld status;#查看服务状态 service ...

  7. Linux下autoconf和automake使用

    转载:www.cnblogs.com/itech/archive/2010/11/28/1890220.html

  8. SQL详解(上)

    SQL 什么是SQL:结构化查询语言(Structured Query Language).SQL标准(例如SQL99,即1999年制定的标准): 由国际标准化组织(ISO)制定的,对DBMS的统一操 ...

  9. 性能测试-ORACLE性能监控

    通过lr做性能测试的过程,通过监控Oracle数据库的性能 采用的监控工具:PeOny PeOny安装 1. 安装服务端 1) LINUX平台安装 解压缩peony3.x.0.x.tar.gz文件,b ...

  10. JVM参数调优

    JVM参数调优 JVM参数调优是一个很头痛的问题,可能和应用有关系,下面是本人一些调优的实践经验,希望对读者能有帮助,环境LinuxAS4,resin2.1.17,JDK6.0,2CPU,4G内存,d ...