楼主:
sixB (6B)
2025-08-08 01:26:543363.
不懂这题为什么能算hard ==
原本以为会重叠超麻烦
结果发现根本就直接切开算就好
真的会重叠的话要问走到边 不是走到角落
class Solution {
public:
int maxCollectedFruits(vector<vector<int>>& f) {
int n = f.size();
int res = 0;
//(0, 0)
for(int i = 0; i < n; i++){
res += f[i][i];
}
//top right
int half = n / 2;
vector<int> dp(n, 0);
int i = 0;
for(; i < half; i++){
vector<int> next(n, 0);
for(int j = 0; j <= i; j++){
next[j] = f[i][n-1-j];
int add = dp[j];
if(j > 0) add = max(add, dp[j-1]);
if(j < i) add = max(add, dp[j+1]);
next[j] += add;
}
dp = move(next);
}
if(n % 2 == 0) half