南昌理工学院ACM集训队
题意阅读理解
有一个矩阵,每个格子里都有一个数 ,每次经过都可以得到这个数的权值,每个格子只能走一次,能向右向上向下走,求从左上角(1,1)到右下角(n,m)路过权值最大的值
可以注意到,这次是可以往上走的,所以如果用普通的线性状态转移方程f[i][j] = max(f[i + 1][j],f[i][j - 1]) + w[i][j];
是肯定不行的,因为可以向上走,而如果max里面再加一个f[i - 1][j]
的话,就会出现重复走的情况,这就是这个题的难点。
状态表式
f[i][j]表示为取到第(i,j)的时候权值最大值
思路过程
我们可以想到一个点,他一定是这样过来的
因为他一定是从右过来的,所以可以先我们枚举每个列每个点从上下来的情况和从左边过来的最大值,第一层循环列,第二层循环行,状态转移方程为
for(int i = 1; i <= n; i ++ )
{
s = max(s