劍指Offer(牛客版)--面試題47:禮物的最大價值

題目描述:

 

在一個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;	
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章