动态规划
问题实例:跳格子 小明和朋友玩跳格子游戏,有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]; }