链接:NC10
题意、输入、输出:
分析:初始化一个最大值,从1,1开始看下、右、右下,判断到它们的体积是否小于它们原本的。小于就走。
思路:dp
代码:
import java.util.*;
public class Solution {
/**
*
* @param presentVolumn int整型二维数组 N*M的矩阵,每个元素是这个地板砖上的礼物体积
* @return int整型
*/
static int inf=0x7fffffff;
public int selectPresent (int[][] presentVolumn) {
// write code here
int n=presentVolumn.length;
if(n==0)return 0;
int m=presentVolumn[0].length;
int[][] dp=new int[n][m];
int[][] hh=presentVolumn;
for(int i=0;i<n;i++)Arrays.fill(dp[i],inf);
dp[0][0]=hh[0][0];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(i+1<n&&dp[i+1][j]>dp[i][j]+hh[i+1][j]){
dp[i+1][j]=dp[i][j]+hh[i+1][j];
}
if(j+1<m&&dp[i][j+1]>dp[i][j]+hh[i][j+1]){
dp[i][j+1]=dp[i][j]+hh[i][j+1];
}
if(i+1<n&&j+1<m&&dp[i+1][j+1]>dp[i][j]+hh[i+1][j+1]){
dp[i+1][j+1]=dp[i][j]+hh[i+1][j+1];
}
}
}
return dp[n-1][m-1];
}
}