BZOJ3144: [Hnoi2013]切糕

Description

Input

第一行是三个正整数P,Q,R,表示切糕的长P、 宽Q、高R。第二行有一个非负整数D,表示光滑性要求。接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x,y,z) (1≤x≤P, 1≤y≤Q, 1≤z≤R)。 
100%的数据满足P,Q,R≤40,0≤D≤R,且给出的所有的不和谐值不超过1000。

Output

仅包含一个整数,表示在合法基础上最小的总不和谐值。

Sample Input

2 2 2
1
6 1
6 1
2 6
2 6

Sample Output

6

HINT

 

最佳切面的f为f(1,1)=f(2,1)=2,f(1,2)=f(2,2)=1

 
考虑用最小割来做,我们可以这样建图:
对于每一个格子(i,j),将S向(i,j,1)连条容量为A[i][j][1]的边,将(i,j,r)向T连条容量为inf的边,(i,j,k-1)向(i,j,k)连一条容量为A[i][j][k]的边。
那么这条链上的割就代表选了一个f(i,j)。
如果加上D的限制,考虑两个相邻格子(i,j)和(i`,j`),从(i,j,k+D)向(i`,j`,k)连一条容量为inf的边,从(i`,j`,k+D)向(i,j,k)连一条容量为inf的边,意为如果f[i][j]选了k+D,那么f[i`][j`]肯定要>=k,且如果f[i`][j`]选了k+D,那么f[i][j]肯定要>=k,解出f[i`][j`]-D<=f[i][j]<=f[i`][j`]+D且f[i][j]-D<=f[i`][j`]<=f[i][j]+D,恰好满足题意。

  

posted @   wzj_is_a_juruo  阅读(230)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示