robber问题的动态规划解法
来源:互联网 发布:知乎为什么会被邀请 编辑:程序博客网 时间:2024/05/19 14:39
接上一篇:http://blog.csdn.net/coronia/article/details/73173765
在此之后,本人在一次测试中也遇到了类似的问题。这一次,我参考了该题的思路并写下了如下动态规划方法:
06.
class
Solution {
07.
public
:
08.
int
maxSum(vector<
int
>& A) {
09.
int
a = 0;
10.
int
b = 0;
11.
12.
for
(
int
i = 0; i < A.size(); i++) {
13.
if
(i % 2==0) {
14.
a = max(a + A[i], b);
15.
}
16.
else
{
17.
b = max(a, b + A[i]);
18.
}
19.
}
20.
21.
return
max(a, b);
22.
}
23.
};
首先将问题分为子问题。之前也说过,这种跳跃式选择的情况不外乎种:一次间隔两个或三个。最后一次选择的结果也无非是两种:最后一项或倒数第二项,而再往前推也是如此。因此可以考虑根据单双数来进行划分:对于某一个元素,是选择它的前两项(双数)还是三项(单数)。这样递推下去,可知起始点也只有两种情况:第一位或第二位。
接下来考虑关联公式。对于某一个与上一选取点间隔两个的点,可以有两种情况:选取它,或是选取它之后的那个点。于是,要比较的就是这两种情况谁更大。同样地,其他的点也要用这种递归调用。注意到如果是一直取间隔为2的点,就会一直维持在奇数点或偶数点下,因此可以分别用两个变量来记录这两者;而当取三个的时候,我们可以发现原本的奇数点就要取偶数点,因此可以直接将偶数对应的变量拿去比较即可。奇数同理
阅读全文
0 0
- robber问题的动态规划解法
- 合唱队问题的动态规划解法
- 背包问题的动态规划解法
- 01背包问题的动态规划解法
- leetcode 198House Robber(简单动态规划解法)
- 0-1背包问题的动态规划解法
- 0-1背包问题的动态规划解法
- TSP问题的动态规划解法(c#实现)
- 0-1背包问题的动态规划解法
- 动态规划 钢条切割问题的朴素解法
- 同一问题的递归与动态规划解法
- 矩阵连乘问题的动态规划解法
- Predict the Winner一个动态规划的问题解法详解
- 最大子段和问题的动态规划解法
- House Robber 动态规划的使用
- House Robber 动态规划
- leetcode 213. House Robber II 入室抢劫 抢劫问题 + 一道经典的DP动态规划问题
- 石子合并问题 --动态规划--解法1
- leetcode第十五周解题总结--二分查找(二)
- Satisfactory Pairs
- Android OkHttp 网络请求 使用详解
- CRC校验
- 作为大龄员工,给既将进入大龄的员工几个忠告
- robber问题的动态规划解法
- 如果有人让你推荐编程技术书,请叫他看这个列表
- 自我鼓励
- Linux系统操作笔记
- [LeetCode] 543. Diameter of Binary Tree
- Lucene
- Lucene01
- jQuery-EasyUI组件(上)
- jQuery-EasyUI组件(下)