1. 程式人生 > >動態規劃---從左上角到右下角的價值最大的路徑

動態規劃---從左上角到右下角的價值最大的路徑

一個 view algorithm sin sum ack for track cout

編程題:動態規劃---從左上角到右下角的價值最大的路徑

騰訊2016年4月2號暑假實習移動開發崗的筆試題,編程題第一題大概題目是:

一個m*n的矩陣,只能向右走或是向下走,矩陣每一個元素代表一個財富值,要求打印出從左上角到右下角走的財富最大總值。

如輸入m=4 ,n=5,

輸入矩陣value=

{ 0 0 7 0 0,

0 0 0 5 0,

2 0 4 0 0,

0 0 0 3 0},

打印出最大財富總值是15。

這是動態規劃的題目,跟“[leetcode 64] Minimum Path Sum------從左上角到右下角的最小路徑值”的思路是一樣的,


C++的參考代碼如下:

編程題:動態規劃---從左上角到右下角的價值最大的路徑
原創 2016年04月03日 
14:55:14 247611 騰訊2016年4月2號暑假實習移動開發崗的筆試題,編程題第一題大概題目是: 一個m*n的矩陣,只能向右走或是向下走,矩陣每一個元素代表一個財富值,要求打印出從左上角到右下角走的財富最大總值。 如輸入m=4 ,n=5, 輸入矩陣value= { 0 0 7 0 00 0 0 5 0, 2 0 4 0 0, 0 0 0 3 0}, 打印出最大財富總值是15。 這是動態規劃的題目,跟“[leetcode 64] Minimum Path Sum------從左上角到右下角的最小路徑值”的思路是一樣的, C++的參考代碼如下: [cpp] view plain copy #include
<iostream> #include <cstdio> #include <algorithm> using namespace std; int value[1024][1024]; int main() { int m, n; scanf_s("%d%d", &m, &n); //輸入矩陣 for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { scanf_s(
"%d", &value[i][j]); } } //計算 for (int i = 1; i < m; ++i) { value[i][0] += value[i - 1][0]; } for (int j = 1; j < n; ++j) { value[0][j] += value[0][j - 1]; } for (int i = 1; i < m; ++i) { for (int j = 1; j < n; ++j) { value[i][j] += max(value[i - 1][j], value[i][j - 1]); } } ////打印調試 //for (int i = 0; i < m; ++i) //{ // for (int j = 0; j < n; ++j) // { // cout << value[i][j] << " "; // } // cout << endl; //} //cout << endl; cout << value[m - 1][n - 1] << endl; return 0; }

動態規劃---從左上角到右下角的價值最大的路徑