剑指47:礼物的最大价值——递归思想/动态规划/循环方式

题目要求:

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

猜你喜欢

转载自blog.csdn.net/yanbao4070/article/details/80191298