Sicily 最大和 | 期末算法机考模拟题
来源:互联网 发布:seo超级管家 编辑:程序博客网 时间:2024/06/09 16:43
Description
从数列A[0], A[1], A[2], …, A[N-1]中选若干个数,要求相邻的数不能都选,也就是说如果选了A[i], 就不能选A[i-1]和A[i+1]. 求能选出的最大和.
1 <= N <= 100000, 1 <= A[i] <= 1000
请为下面的Solution类实现解决上述问题的函数maxSum,函数参数A是给出的数列,返回值为所求的最大和.
class Solution {public: int maxSum(vector<int>& A) { }};
例1:A = {2, 5, 2},答案为5.
例2:A = {2, 5, 4},答案为6.
Thinking
本题考查动态规划,要求找出能得到最大和的选择方法。设置两个数组用于存储不同的选择情况。
将题目给的数组遍历一次;
数组a存储的是不选择当前这个数时的总和;因为不选当前的数字,所以前一个数字可选也可以不选,取总和较大的情况即可。(即max(a[i - 1], b[i- 1])
数组b存储的是选择当前这个数时的总和;所以前一个数字必定没有选,即总和为b[i] = a[i - 1] + A[i];
最后的结果从a[s -1],b[s - 1]中选出较大的一个即可。
Solution
class Solution {public: int maxSum(vector<int>& A) { int s = A.size(); int a[s]; int b[s]; a[0] = 0; b[0] = A[0]; for(int i = 1; i < s; i++){ a[i] = max(a[i - 1], b[i - 1]); b[i] = a[i - 1] + A[i]; } return max(a[s - 1], b[s - 1]); }};
阅读全文
0 0
- Sicily 最大和 | 期末算法机考模拟题
- Sicily 无环图 | 算法期末机考模拟题
- Sicily 相连的1 | 算法期末机考模拟题
- Sicily 会议安排 | 算法期末机考模拟题
- Sicily期末算法模拟题
- Sicilly 等价二叉树 | 算法期末机考模拟题
- 算法机考模拟题1005.最大和
- 第十九周:[sicily] 算法机考模拟题
- 第十七周:[Sicily]机考模拟题1000-1006
- 算法机考模拟题
- sicily-C++机考模拟考-1000. 购买电脑
- 8道算法机考模拟题
- 算法机考模拟题 part1
- 算法机考模拟题 part2
- Sicily 算法模拟题 1001
- 期末考
- 算法机考模拟题1000.函数求值
- 算法机考模拟题1001.会议安排
- android Studio 导入 早期项目 遇到refreshing gradle project
- 使用m2eclipse为eclipse集成Maven
- Context的理解
- javascript之数据类型与变量
- ActiveMQ发布订阅模式
- Sicily 最大和 | 期末算法机考模拟题
- set的重载.
- JAVA学习笔记(2):求解和为15的棋盘游戏
- 查找算法
- 游戏编程入门(20):记录高分
- 解决idea自动生成的web.xml中web-app报错的问题
- X2Go Client的使用(新手向)
- 高空坠球
- 论文笔记:ImageNet classification with deep convolution neural networks