LeetCode题解——删除并获得点数
- 题目介绍
- 解题思路
这是一类动态规划的题目,假设nums = [2,2,3,3,3,4],我们进行一次映射转换sum[0,0,4,9,4],第一行是sum下标也是nums的值,第二行是sum值,那题目的意思可以转换为sum数组,相连的两个数不能同时取,求sum里面元素怎么相加才能最大。
0 | 1 | 2 | 3 | 4 |
0 | 0 | 2*2 = 4 | 3*3 = 9 | 1*4 = 4 |
那么最后一次相加求和,对于要不要加上sum[4]是不是有两种处理方法,第一种加上了sum[4],第二种是没有加上,那么如何确定是哪一种呢?
第一种加上了:也就是倒数第三次处理sum[2]求和的最大值dp(n-2)加上sum[4]的最后结果要大于等于倒数第二次处理sum[3]求和的最大值dp(n-1)。
第二种没加上:和第一种情况相反,倒数第二次处理sum[3]求和的最大值dp(n-1)大一点。
那么可以总结出dp(n) = dp(n-2)+sum[n]>=dp(n-1)?dp(n-2)+sum[n]:dp