BZOJ4707 : B君的技巧
2024-10-14 10:40:25
建立线段树,设$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;
}
最新文章
- [LeetCode] Maximal Square 最大正方形
- 关于#define for if(false);else for
- 基于Yahoo网站性能优化的34条军规及自己的见解
- ios企业应用部署
- WCF框架处理流程初探
- 使用VirtualBox进行端口转发 连接数据库
- Linux3:more、which、find、chmod、tar、diff、grep、ps、netstat、uname
- win环境变量立即生效
- Swift3.0语言教程获取C字符串
- thinkphp3.23整合phpexcel
- linux 虚拟文件系统----------Virtual File System VFSkky
- centos redis 安装
- HDU 3362 Fix(状压dp)
- 【小错误】WPF代码报错:未将对象引用设置到对象的实例。
- LeetCode之“链表”:Intersection of Two Linked Lists
- centos7只rsync+inotify
- 集合基本操作 Python DAY2
- 【ASP.NET MVC系列】浅谈ASP.NET MVC资源过滤和授权
- pyqt text browser 设置文本
- 【JVM底层策略 一】GC roots如何判断对象不可达
热门文章
- notifyDataSetInvalidated和notifyDataSetChanged有什么区别
- 瞧一瞧迷一般的SQLDA
- 在ubuntu上搭建开发环境1---在windows7的基础上在安装ubuntu(双系统)
- 判断一个类到底是从哪个jar包中调用的工具类
- soapUI 使用Property
- Ubuntu 上安装 MongoDB
- [Liferay6.2]Connect to ajax.googleapis.com …… timed out
- 小甲鱼PE详解之IMAGE_DOS_HEADER结构定义即各个属性的作用(PE详解01)
- opengl常用函数
- Eclipse配置Lifery SDK步骤与错误解决。