class Solution {
public:
int jewelleryValue(vector<vector<int>>& frame) {
int m = frame.size(),n = frame[0].size();
vector<vector<int>> dp(m+1,vector<int>(n+1,0));
for(int i = 1; i <= m;i++){
for(int j = 1; j <= n;j++){
dp[i][j] = max(dp[i-1][j],dp[i][j-1]) + frame[i-1][j-1];
}
}
return dp[m][n];
}
};
class Solution {
public:
int minFallingPathSum(vector<vector<int>>& matrix) {
int m = matrix.size(), n = m;
vector<vector<int>> dp(m+1,vector<int>(n + 2,INT_MAX));
for(int j = 0; j < n+2; j++) dp[0][j] = 0;
for(int i = 1; i <= m; i++)
for(int j = 1; j <= n; j++)
dp[i][j] = min(min(dp[i-1][j],dp[i-1][j-1]),dp[i-1][j+1]) + matrix[i-1][j-1];
sort(dp[m].begin()+1,dp[m].end()-1);
return dp[m][1];
}
};