贪心法与动态规划
来源:互联网 发布:购物车程序java 编辑:程序博客网 时间:2024/05/16 19:54
贪心算法:
连续数之和最大值(max sum)
题目大意:
给出一个长度为N的数列(数列中至少有一个正数),要求求出其中的连续数之和的最大值。(也可以加入a和b来限制连续数的长度不小于a且不大于b)。
解题思路:
先说不加限制的那种,定义一个统计变量tot,然后用循环进行如下操作:inc(tot,item)其中如果出现tot<0的情况,则将tot赋值为0。在循环过程之中tot出现的最大值即为答案。
如果加入了限制条件的话,问题就变得难一些了(这句真的不是废话)。为此我们先定义数组sum[i]来表示code[1]到code[i]之和(这样的话code[a]~code[b]的和我们就可以用sum[b]-sum[a-1]来表示了)。
再维护一个数组hash[i]来表示满足条件的sum[a-1]的下标,并使之按递增顺序排列,这样当前以第i的数为终止的数列的最大值肯定就是sum[i]-sum[hash[1]]。
现在我们来讨论hash数组之中的数据需要满足的条件和如何维护的具体问题:
当考虑到以第i个数为结尾时,hash[i]所表示的下标需要满足的第一个条件就是题目规定的长度限制,我们需要实时的加入满足长度规定的下标,删除不符合要求的下标。其次,与不加限制条件时相同,若sum[i]-sum[hash[1]]的值小于零,则清空数组hash。
维护时可以这样,当考虑到第i个数时,我们就将下标i-a+1加入到hash中,因为hash中原来已经排好序,因此我们我们可以用插入排序来维护hash的递增性,然后我们考察hash[1],若hash[1]<i-b+1,则证明其已超出长度限制,我们就将其删除,接着再考虑更新后的hash[1],如此重复直至找到一个满足条件的hash[1]为止。
我们可以用链表来表示hash,这样就可以减少数据加入和删除时频繁数据移动的时间消耗。
记录下sum[i]-sum[hash[1]]的最大值即为答案。
动态规划算法:矩阵连乘
http://blog.163.com/zhe_wang_2009/blog/static/1722821212011926855333/
胜负未分 SVD 奇异值分解
- 贪心法与动态规划
- 分治法、动态规划与贪心算法
- 动态规划与贪心算法
- leetcode:贪心与动态规划
- PAT:贪心与动态规划
- 动态规划与贪心算法
- 【动态规划】【贪心】动态规划与贪心的联系
- 动态规划、分治法与贪心算法的区别
- 动态规划、分治法与贪心算法的区别
- 动态规划、分治法与贪心算法的区别
- 贪心法和动态规划
- 分治与递归、动态规划、贪心
- 动态规划 分治算法与 贪心算法
- 贪心与动态规划的区别
- 动态规划与贪心的区别
- 动态规划与贪心算法的区别
- 动态规划与贪心算法的比较
- 贪心算法与动态规划的比较
- UVA - 12002(特殊的LIS和LDS组合)
- SAP EWM中仓库任务WT创建的函数
- No Matching Security Types
- Linux驱动下的platform总线架构(转)
- 关闭Aero Shake节约系统资源的方法
- 贪心法与动态规划
- Difference between ArrayList and Vector In java
- Codeforces Round #283 (Div. 2) D Tennis Game ——枚举,二分
- 求解?Android自定义下拉,为什么只能获取到第一个控件的焦点了
- oracle中分页查询使用ROWNUM的问题
- 如何查看用户使用情况(最近登入,活跃度。。。)
- Python数据类型 -- 答疑
- MyEclipse中集成和使用Maven的方法
- Android大图片裁剪终极解决方案(上:原理分析)