題目描述:
在一個m×n的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大於0)。你可以從棋盤的左上角開始拿格子裏的禮物,並每次向左或者向下移動一格直到到達棋盤的右下角。給定一個棋盤及其上面的禮物,請計算你最多能拿到多少價值的禮物?
分析:
完整代碼:
//給出禮物矩陣,求矩陣中能獲取的禮物最大值
int getMaxValues_solution(const int* values, int rows, int cols)
{
//判斷輸入的合法性
if( values == nullptr || rows <= 0 || cols <= 0)
return 0;
//聲明一個變量,用來存儲不同位置對應的禮物價值
int* MaxValues = new int[cols];
//遍歷整個矩陣
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
//聲明一個變量,計算當前位置上方的禮物價值
int up = 0;
int left = 0;
//如果在當前位置存在上方值
if(i > 0)
up = MaxValues[j];
//如果存在當前位置存在左邊值
if(j > 0)
left = MaxValues[j-1];
//計算當前位置的禮物最大值
MaxValues[i] = max(up,left) + values[i*cols+j];
}
}
//求最終的禮物最大值
int result = MaxValues[cols - 1];
//刪除MaxValues數組
delete []MaxValues;
//返回最終的結果
return result;
}