题名:传纸条
可能是我太弱了一开始复杂度计算错了
结果花10min打了个暴力才30分
然后才开始想dp正解
首先纸条正反传一次的问题可以转化为正着满足条件的传2次
然后我们考虑一个状态 f[i][j][k][l]
i,j,k,l 表示正着第一次传到(i,j)第二次传到(k,l)时最优解为f[i][j][k][l]
那么转移方程就非常好写了
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
for (int k=1;k<i;k++)
for (int l=j+1;l<=m;l++)
{
f[i][j][k][l]=max(f[i][j][k][l],f[i-1][j][k-1][l]+a[i][j]+a[k][l]);
f[i][j][k][l]=max(f[i][j][k][l],f[i-1][j][k][l-1]+a[i][j]+a[k][l]);
f[i][j][k][l]=max(f[i][j][k][l],f[i][j-1][k-1][l]+a[i][j]+a[k][l]);
f[i][j][k][l]=max(f[i][j][k][l],f[i][j-1][k][l-1]+a[i][j]+a[k][l]);
}
但是要注意边界的问题
1<=k<i
j+1<=l<=m
洛谷oj上的数据水所以即使你边界没考虑清楚也能A
但是noip就不一样了
ps:洛谷这题题解有几个都是边界有问题的