動態規劃---從左上角到右下角的價值最大的路徑
阿新 • • 發佈:2017-09-10
一個 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 0, 0 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; }
動態規劃---從左上角到右下角的價值最大的路徑