题目大意:
给出一张大小为 n ∗ m n*m n∗m 的矩阵,每一块都有一个权值 a i , j a_{i,j} ai,j ,可以随机选择起点,并且只能向右拐或向前走,不能碰到走过的路或走出图,求走过的路径权值和最大为多少。
数据范围:
1 ≤ n , m ≤ 32 , ∣ a i , j ∣ ≤ 1 0 4 1 \le n,m \le 32 , |a_{i,j}| \le 10^4 1≤n,m≤32,∣ai,j∣≤104
思路:
转移方程非常阴间。。。
看到数据范围 n , m ≤ 32 n,m \le 32 n,m≤32 发现使用搜索时间上过不去,所以考虑使用 D P DP DP 。
我们可以发现所有合法的路径一定包含一个或两个回环,如图:
所以我们可以先 D P DP DP 求出所有的回环,再将回环拼接在一起就可以了。
可以发现每一个回环的区别有:
1. 1. 1. 顺时针和逆时针(如图2的两个回环)
2. 2. 2. 结束的点(如图1在右下角,图2第一个回环在右下角,第二个回环在左下角)
所以可以设 f x , y , x x , y y , 0 / 3 , 0 / 1 f_{x,y,xx,yy,0/3,0/1} fx,y,xx,yy,0/3,0/1 表示这个回环是在左上角为 ( x , y ) (x,y) (x,y) ,右下角为 ( x x , y y ) (xx,yy) (xx,yy) 的矩阵上,且结束点在左上(左下,右上,右下)角,形状为顺时针(逆时针)的最大路径价值和。
如图,以结束点在右上角为例,则可以转移到的图形有三种:
1. 1. 1. 可以由上一个结束点也在这个点的相同回环转移,如图1。
2. 2. 2. 可以由往下缩短一格后再加上此点的回环转移,如图2。
3. 3. 3. 可以由一个回环加上一段横行(竖行)转移,如图3。
所以要先用前缀和记录所有的横行和竖行的权值前缀和,以便 3 3 3 的转移。
并且图形是由小图形到大图形进行转移,所以要枚举这个回环的长和宽来进行 D P DP DP