算法期中 最小和
来源:互联网 发布:淘宝网买东西流程 编辑:程序博客网 时间:2024/06/06 00:17
Problem
从数列A[0], A[1], A[2], …, A[N-1]中选若干个数,要求对于每个i(0<=i < N-1),A[i]和A[i+1]至少选一个数,求能选出的最小和.
1 <= N <= 100000, 1 <= A[i] <= 1000
请为下面的Solution类实现解决上述问题的函数minSum,函数参数A是给出的数列,返回值为所求的最小和.
例1:A = {2, 5, 2},答案为4.
例2:A = {2, 5, 4},答案为5.
思路
- 当数组只有一个元素时,直接返回第一个元素;
- 当数组有两个元素,返回最下的一个;
- 数组有三个或以上元素时,设置数组S,若序号为i,则S[i]表示以数组第i个元素结尾的最小和。
对于数列 1 2 3 4 5 6 设S[0] = a[0];S[1] = a[1]; S[2]为以3结尾的最小和,很明显,序列要么是 1 3 要么是 2 3同理,S[3]是以4结尾的最小和,序列选择有:1 2 41 3 42 3 42 4显然,2 4 是最小和序列由于题目规则,在第 i、i+1个元素中,必须选择一个,所以,在算第i个元素结尾的最小和时,i-1、i-2中的一个元素必须被选择,所以第i个元素的最小和等于以i-1或i-2结尾的元素的最小和加上本身。存在以下规律S[i] = min(S[i-2] + a[2] + S[i-1] + a[2]) i >= 3
Code
class Solution {public: int minSum(vector<int>& A) { if (A.size() == 1) return A[0]; int *S = new int[A.size()]; S[0] = A[0]; S[1] = A[1]; for (int i = 2; i < A.size(); i++) { S[i] = min(S[i-1] + A[i], S[i-2] + A[i]); } return min(S[A.size()-1, A.size()-2]); }};
阅读全文
0 0
- 算法期中 最小和
- 算法期中1005. 最小和
- 算法期中 : 1005. 最小和
- 算法期中——最小和
- 算法期中 最小差
- 算法分析与设计期中测试——最小和
- 算法期中——最小差
- Leetcode198.+算法期中1005. 动态规划问题之最大最小和问题
- 算法期中1000. 分组
- [算法期中] 分组
- 算法期中 拓补序
- 算法期中 最近的0
- 算法期中 合并二叉树
- 算法期中——分组
- 算法期中1002. 合并二叉树
- 算法期中1003. 最近的0
- 算法期中1004. 拓扑序[Special judge]
- 算法期中 最长公共子串
- java运算符
- SQL分组求最大值
- 图像局部与分割(一)
- 读《知心书.第二辑:疯子的自由》
- 干货 | NIPS 2017:用于序列生成的推敲网络
- 算法期中 最小和
- idea创建项目
- Android keystore的作用以及如何生成
- How to train your Deep Neural Network
- Ajax跨域(jsonp) 调用JAVA后台
- 语音训练营
- C++基础:各种输入方法总结,cin、cin.get()、cin.getline()、getline()、gets()、getchar()
- Android 使用Android studio实现第三方QQ登录
- oracle_install