1463. Cherry Pickup II

纠结在相交的情况下该怎么处理。
该问题就是计算,假设A\B两人停在row-1行的各个位置,他们到达当前位置,路上和的最大值。

dp[i][j1][j2] 定义为A停在[i][j1] B在[i][j2],他们到达当前位置,路上和的最大值。
那么dp[i][j1][j2] = max(dp[i][j1-1:j1+1][j2-1:j2+1] )+grid[i][j1]+grid[i][j2]*(j1!=j2)
然后利用这个dp,就可以天然的解决这问题。
class Solution {
public:
    int cherryPickup(vector>& grid) {
        int row = grid.size();
        int col = grid[0].size();
        vector temp1(col, -1e9);
        vector> temp2(col, temp1);
        vector>> dp(row, temp2); // dp: [row, col, col]
        dp[0][0][col-1] = grid[0][0] + grid[0][col-1];
        for(int i = 1;i=0&&j1-1>=0&&j2-1>=0){
                        dp[i][j1][j2] = max(dp[i][j1][j2], dp[i-1][j1-1][j2-1]);
                    }
                    if (i-1>=0&&j1-1>=0){
                        dp[i][j1][j2] = max(dp[i][j1][j2], dp[i-1][j1-1][j2]);
                    }
                    if (i-1>=0&&j1-1>=0&&j2+1=0&&j2-1>=0){
                        dp[i][j1][j2] = max(dp[i][j1][j2], dp[i-1][j1][j2-1]);
                    }
                    if (i-1>=0){
                        dp[i][j1][j2] = max(dp[i][j1][j2], dp[i-1][j1][j2]);
                    }
                    if (i-1>=0&&j2+1=0&&j1+1=0){
                        dp[i][j1][j2] = max(dp[i][j1][j2], dp[i-1][j1+1][j2-1]);
                    }
                    if (i-1>=0&&j1+1=0&&j1+1

你可能感兴趣的:(leetcode,leetcode)