タイトル説明:
m * nチェス盤の各正方形にギフトが置かれ、各ギフトには特定の値(0より大きい値)があります。ボードの左上隅から始めて、グリッド内のギフトを取得し、ボードの右下隅に到達するまで、一度に1マスずつ右または下に移動できます。チェス盤とその上の贈り物の価値を考慮して、あなたが得ることができる贈り物の最大値を計算してください?
例1:
入力:
[
[1,3,1]、
[1,5,1]、
[4,2,1]
]
出力:12
説明:パス1→3→5→2→ 1が最大の値を取得できます自分の贈り物
入力:
0 <grid.length <= 200
0 <grid [0] .length <= 200
出典:LeetCode(LeetCode)
リンク:https ://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof
著作権はLeetCodeが所有しています。商用転載の場合は、公認機関にご連絡ください。非商用転載の場合は、出典を明記してください。
問題解決のアイデア:
最も基本的なdp問題は、タイトルに従って伝達方程式を見つけるだけで済みます。
タイトルには右に1マス、下に1マスしか必要ないため、伝達方程式を導出することは難しくありません。
dp [i] [j] = max(dp [i-1] [j] + grid [i] [j]、dp [i] [j-1] + grid [i] [j])i> 0 && j> 0
また、i = 0の場合、最初の行では、右に移動することによってのみdp値を取得できるため、次のようになります。dp[i] [j] = dp [i] [j-1] + grid [i] [ j] i == 0 && j> 0
j = 0の場合、最初の列で、それらのdp値は下に移動することによってのみ取得できるため、dp [i] [j] = dp [i-1] [j] + grid [i] [j] i> 0 && j == 0
開始点は左上隅です。つまり、i == 0 && j == 0の場合、dp [i] [j] = grid [i] [j]です。
したがって、次の詳細な伝達方程式が得られます
。①開始点:i == 0 && j == 0 dp [0] [0] = grid [0] [0]
②最初の行:i == 0 && j> 0 dp [i] [j] = dp [i] [j-1] + grid [i] [j]は、右に移動することによってのみ到達できます
③最初の列:i> 0 && j == 0 dp [i] [j] = dp [i-1] [j] + grid [i] [j]は、下に移動して到達することしかできません。
④一般的な状況:i> 0 && j> 0 dp [i] [j] = max(dp [i-1] [j] + grid [i] [j]、dp [i] [j-1] + grid [i] [j])右下に移動することで到達できます
注:この問題は、DFSを使用して解決することもできます
コード:
public class jianzhi_Offer_47 {
public int maxValue(int[][] grid){
if (grid.length == 0){
return 0;
}
int[][] dp = new int[grid.length][grid[0].length];
dp[0][0] = grid[0][0];
for(int i = 0; i < grid.length; i++){
for (int j = 0; j < grid[i].length; j++){
if(i == 0 && j > 0){
dp[i][j] = dp[i][j-1] + grid[i][j];
}
else if(j == 0 && i > 0){
dp[i][j] = dp[i - 1][j] + grid[i][j];
}
else if(i > 0 && j > 0) {
dp[i][j] = Math.max(dp[i - 1][j] + grid[i][j], dp[i][j - 1] + grid[i][j]);
}
}
}
return dp[grid.length - 1][grid[0].length - 1];
}
public static void main(String[] args) {
jianzhi_Offer_47 obj = new jianzhi_Offer_47();
int[][] grid = new int[][]{
{
1,2,3,4,5},{
1,3,5,2,3},{
3,1,2,5,4},{
4,3,3,5,4}
};
System.out.println(obj.maxValue(grid));
}
}