P1004 [NOIP2000 提高组] 方格取数(费用流/多维DP)
P1004
方法一:
四维的DP,对于一个人在棋盘从起点移动到终点的情况我们可以想到:
定义\(f[i][j]\)表示从\((1,1)\)移动到\((i,j)\)的最优解。
但问题在于他还需要走回来,所以我们不妨放两个人到终点上去,两个人从起点走到终点与一个人从在起点终点之间打来回是一样的。
于是我们定义这样一个状态:\(f[i][j][l][k]\),表示第一个人走到\((i,j)\),第二个人走到\((l,k)\)的最优解。
对于每一个状态都有四种后续状态,枚举转移即可。
听说可以利用对角线转移压缩成三维的,\(orz....\)
方法二:
最大费用最大流。
无意间在洛谷上看到的\(tag\),翻了翻题解,确实想不到,太强了。
从源点向\((1,1)\)连接一条容量为2,费用为0的边。
从\((n,n)\)向汇点连接一条容量为2,费用为0的边。
对于每一个方格向右边和下边连接一条容量为\(inf\),费用为0的边
有一些方格实际上都有权值,不妨拆点,连接一条容量为1,费用为权值的边,又因为每一个方格不一定只走一次,所以再连接一条容量为inf,费用为0的边。
最后跑最大费用最大流。