动态规划

问题实例:跳格子 小明和朋友玩跳格子游戏,有n个连续格子,每个格子有不同的分数,小朋友可以选择以任意格子起跳,但是不能跳连续的格子,也不能回头跳;
给定一个代表每个格子得分的非负整数数组,计算能够得到的最高分数。
输入描述:
给定一个数列,如:1231
1 < nums.length < 100
0 <= nums[i] <= 1000
输出描述:
输出能够得到的最高分,如:
示例1:
输入:
2 7 9 3 1
输出:
12 */

#define max(a, b) ((a) > (b) ? (a) : (b))

思考方向:
数列:1 2 3 ... n-2 n-1 n
首先,函数中定义一个整型数组,用于存储跳n个格子的最高分int maxScore[128],maxScore[0]直接定义为零,因为跳零个格子分数就是零。
跳n个格子,因为不能跳连续的格子,maxScore[n]最高分有两种情况
情况1,maxScore[n-2]+num[n-1]
情况2,maxScore[n-1]
那么最高分取max宏定义高的就是解这个问题的算法逻辑,maxScore[n] = max(maxScore[n-2]+num[n-1], maxScore[n-1])
然后,将数列的首地址和数列长度传入函数进行计算

int getMax(int num[], int n)
{
    int maxScore[128] = {0};
    maxScore[1] = num[0];

    for (int i = 2; i <= n; i++)
    {
        maxScore[i] = max(maxScore[i-2]+num[i-1], maxScore[i-1]);
    }
    return maxScore[n];
}

 

posted @ 2024-08-22 14:51  jason8826  阅读(2)  评论(0编辑  收藏  举报