//
// Created by Administrator on 2021/7/27.
// #ifndef C__TEST01_HOUSEROBBER2_HPP
#define C__TEST01_HOUSEROBBER2_HPP
#include <iostream>
#include <vector>
using namespace std; class HouseRobber2 {
/* 有一 圈 N栋房子(0 - N-1),房子i里有A[i]个金币
* 一个窃贼想选择一些房子偷金币
* 但是不能偷任何挨着的两家邻居,否则会被警察逮住
* 最多偷多少金币
* 例子:
* 输入:A = {3, 8, 4}
* 输出:8(只偷第二家的金币)
* */
public:
HouseRobber2(vector<int> An);
int HouseRobber2DP(vector<int> &A);
private:
vector<int> A;
}; HouseRobber2::HouseRobber2(vector<int> An):
A(An){
A.resize(An.size());
}
int HouseRobber2::HouseRobber2DP(vector<int> &A) {
if(A.empty()) {
return 0;
}
int N = A.size();
//f[N]表示第N家时的最大偷的钱
vector<int> f1(N);
vector<int> f2(N);
f1[0] = 0;
f2[0] = 0;
for(int i = 1; i < N; ++i){
//没有偷最后一个房子
f1[i] = f1[i-1];
if(i > 1) {
f1[i] = max(f1[i - 2] + A[i - 1], f1[i - 1]);
}
//没有偷第一个房子
if(i == 1){
f2[1] = A[1];
continue;
}
f2[i] = f2[i-1];
if(i > 1) {
f2[i] = max(f2[i - 2] + A[i], f2[i - 1]);
}
}
return max(f1[N-1], f2[N-1]);
//return max(f1[N-1],f2[N-1]);
} #endif //C__TEST01_HOUSEROBBER2_HPP

HouseRobber II的更多相关文章

  1. leetcode日记 HouseRobber I II

    House Robber I You are a professional robber planning to rob houses along a street. Each house has a ...

  2. lintcode:打劫房屋II

    题目 打劫房屋II 在上次打劫完一条街道之后,窃贼又发现了一个新的可以打劫的地方,但这次所有的房子围成了一个圈,这就意味着第一间房子和最后一间房子是挨着的.每个房子都存放着特定金额的钱.你面临的唯一约 ...

  3. [LeetCode]House Robber II (二次dp)

    213. House Robber II     Total Accepted: 24216 Total Submissions: 80632 Difficulty: Medium Note: Thi ...

  4. House Robber I & II & III

    House Robber You are a professional robber planning to rob houses along a street. Each house has a c ...

  5. 【leetcode】198.HouseRobber

    198.HouseRobber You are a professional robber planning to rob houses along a street. Each house has ...

  6. Leetcode 笔记 113 - Path Sum II

    题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...

  7. Leetcode 笔记 117 - Populating Next Right Pointers in Each Node II

    题目链接:Populating Next Right Pointers in Each Node II | LeetCode OJ Follow up for problem "Popula ...

  8. 函数式Android编程(II):Kotlin语言的集合操作

    原文标题:Functional Android (II): Collection operations in Kotlin 原文链接:http://antonioleiva.com/collectio ...

  9. 统计分析中Type I Error与Type II Error的区别

    统计分析中Type I Error与Type II Error的区别 在统计分析中,经常提到Type I Error和Type II Error.他们的基本概念是什么?有什么区别? 下面的表格显示 b ...

随机推荐

  1. Java初步学习——2021.09.23每日报告,第三周周四

    (1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 学习数组,编写了一个随机选牌的代码.自己最开始一直想只设置一个字符串数组,利用随机数来输出,但那样对字符串赋值会比较麻烦.可 ...

  2. 洛谷2408不同字串个数/SPOJ 694/705 (后缀数组SA)

    真是一个三倍经验好题啊. 我们来观察这个题目,首先如果直接整体计算,怕是不太好计算. 首先,我们可以将每个子串都看成一个后缀的的前缀.那我们就可以考虑一个一个后缀来计算了. 为了方便起见,我们选择按照 ...

  3. qsort()函数的使用

    函数声明 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) 参数 ...

  4. FastAPI 学习之路(四)

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) 之前的文章分享了如何去在请求中增加参数,本文我们将分享 ...

  5. 2020.5.17--牛客小白月赛25 F.疯狂的自我检索者

    F.疯狂的自我检索者 链接:https://ac.nowcoder.com/acm/contest/5600/F来源:牛客网 牛妹作为偶像乐队的主唱,对自己的知名度很关心.她平时最爱做的事就是去搜索引 ...

  6. spyglass DFT

    SolvNet spyglass clock_11 内部 generated clocks 在shift mode 不被 testclock 控制. Fix View the Incremental ...

  7. pycharm安装第三方库

    https://jingyan.baidu.com/article/4853e1e54b845e1909f7268f.html

  8. 初学python-day3 元组

    day2 列表已更新!

  9. Go 里的超时控制

    前言 日常开发中我们大概率会遇到超时控制的场景,比如一个批量耗时任务.网络请求等:一个良好的超时控制可以有效的避免一些问题(比如 goroutine 泄露.资源不释放等). Timer 在 go 中实 ...

  10. Linux C 数据结构 ->单向链表

    之前看到一篇单向链表的博文,代码也看着很舒服,于是乎记录下来,留给自己~,循序渐进,慢慢 延伸到真正的内核链表~(敢问路在何方?路在脚下~) 1. 简介 链表是Linux 内核中最简单,最普通的数据结 ...