您的位置:首页 > 其它

腾讯笔试-找矩阵路径最大值

2016-04-06 13:46 288 查看
题目:给定一个矩阵,矩阵每个点都有自己的值,现在求从左上点到右下点的最大值。

使用dp动态规划,找出每个点的最大值即可:

class mydp{
public int value;
public String path="";

public mydp(int value,String path) {
this.value = value;
this.path=path;
}

public void setPath(String path) {
this.path += (path+" ");
}
}
public class FinaPathMatxValue {
public static void main(String[] args) {
int[][] test=new int[][]{{3,8,7,2},{4,3,1,5},{7,4,3,1},{5,1,6,4}};
System.out.println(findPathMaxValue(test).path);
}

private static mydp findPathMaxValue(int[][] test) {
mydp[][] dp=new mydp[test.length][test[0].length];
dp[0][0]=new mydp(test[0][0],String.valueOf(test[0][0]));
for (int i = 0; i < test.length; i++) {
for (int j = 0; j < test[0].length; j++) {
if (i==0&&j==0){
continue;
}
else if (j==0){
dp[i][j]=new mydp((dp[i-1][j].value+test[i][j]),dp[i-1][j].path+" "+String.valueOf(test[i][j]));
}
else if (i==0){
dp[i][j]=new mydp((dp[i][j-1].value+test[i][j]),dp[i][j-1].path+" "+String.valueOf(test[i][j]));
}
else {
if (dp[i-1][j].value>dp[i][j-1].value){
dp[i][j]=new mydp((dp[i-1][j].value+test[i][j]),dp[i-1][j].path+" "+String.valueOf(test[i][j]));
}else {
dp[i][j]=new mydp((dp[i][j-1].value+test[i][j]),dp[i][j-1].path+" "+String.valueOf(test[i][j]));
}

}
}
}
return dp[test.length-1][test[0].length-1];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: