题目要求:
在一个m * n的棋盘的每一个格都放有一个礼物,每个礼物都有一定价值(大于0)。从左上角开始拿礼物,每次向右或向下移动一格,直到右下角结束。给定一个棋盘,求拿到礼物的最大价值。例如,对于如下棋盘
1 10 3 8
12 2 9 6
5 7 4 11
3 7 16 5
礼物的最大价值为1+12+5+7+7+16+5=53。
int getMaxValue_solution2(const int* values, int rows, int cols) { if(!values||rows<0||cols<0) return 0; int *val = new int[cols]; for(int i=0;i<rows;i++){ for(int j=0;j<cols;j++){ int left=0; int up=0; if(i>0) up = val[j]; if(j>0) left = val[j-1]; val[j]=std::max(up,left)+values[i*cols+j]; } } int maxval = val[cols-1]; delete []val; return maxval; }