传纸条【动态规划】
题目描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/109c5ffdd29945699d6128e6ebac3cbb.png#pic_center)
AC代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[55][55], dp[105][55][55];
signed main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
cin>>a[i][j];
}
}
memset(dp, 0, sizeof dp);
for (int i = 2; i <= n + m; ++i) {
for (int y1 = 1; y1 <= m && y1 < i; ++y1) {
for (int y2 = 1; y2 <= m && y2 < i ; ++y2) {
dp[i][y1][y2] = max(max(dp[i - 1][y1][y2],dp[i - 1][y1 - 1][y2 - 1]),
max(dp[i - 1][y1 - 1][y2],dp[i - 1][y1][y2 - 1]));
dp[i][y1][y2] += a[i - y1][y1];
if(y1 != y2)
dp[i][y1][y2] += a[i - y2][y2];
}
}
}
cout<<dp[n + m][m][m];
return 0;
}