const int N = 52;
class Solution {
public:
int cherryPickup(vector<vector<int>>& G) {
int n = G.size();
vector<vector<int>> g(n+1,vector<int>(n+1));
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
g[i+1][j+1] = G[i][j];
int f[2*N][N][N];
// -1 不可达
memset(f,0xcf,sizeof f);
f[2][1][1] = g[1][1];
for(int k=2;k<=2*n;k++){
for(int x1=1;x1<=n;x1++){
for(int x2=1;x2<=n;x2++){
int y1 = k-x1;
int y2 = k-x2;
if(y1>=1 && y2>=1 && y1<=n && y2<=n && g[x1][y1]!=-1 && g[x2][y2]!=-1){
int &x = f[k][x1][x2];
int val = g[x1][y1];
if(x1 != x2) val += g[x2][y2];
x = max(x,f[k-1][x1-1][x2-1]+val);
x = max(x,f[k-1][x1][x2-1]+val);
x = max(x,f[k-1][x1-1][x2]+val);
x = max(x,f[k-1][x1][x2]+val);
}
}
}
}
return max(0, f[2*n][n][n]);
}
};
LeetCode 741. 摘樱桃 (网格DP)
猜你喜欢
转载自blog.csdn.net/qq_44846324/article/details/109006869
今日推荐
周排行