给定数组A=[1,2,4,1,7,8,3],求出数组A中互不相邻的数的最大和。

例如:如果选择了8,则不能选择7和3,在本例中最大的和为1+4+7+3=15

分析,这是一道典型的使用动态规划求解的题目(当然能够使用万能的回溯法,但显然不是很棒),最优子结构为:

f(i)=max{f(i - 2) + A[i], f(i - 1)}

解释一下,对于第i位,如果选择A[i],则不能选择i-1位,因此有f(i - 2) + A[i],如果不选择A[i],则将该问题放缩到i-1,因此有f(i-1)。

对于边界情况,f(0) = A[0],f(1) = max{A[0], A[1]}

首先使用递归写法实现最基本的解法:

def f(i):if i == 0:  return A[0]if i == 1:return max(A[0], A[1])return max(A[i] + f(i - 2), f(i - 1)}

使用递归的写法终归效率太低下了,因此接下来使用自底向上的迭代方法来实现这个问题,使用长度为len(A)的数组来保存中间的值:

import numpy as npA = [1,2,4,1,7,8,3]def non_rec_f():opt = np.zeros(len(A))opt[0] = A[0]opt[1] = max(A[0], A[1])for i in range(2, len(A)):opt[i] = max(opt[i - 2] + arr[i], opt[i - 1])return opt[len(A) - 1]

动态规划系列(4)——不相邻数最大和相关推荐

  1. 思考一道题:非相邻数最大和

    给定一个整数的数组,相邻的数不能同时选,求从该数组选取若干整数,使得他们的和最大,要求只能使用o(1)的空间复杂度. (抽时间再看看 ) // 非相邻数最大和.cpp : 定义控制台应用程序的入口点. ...

  2. 动态规划系列问题—从小白到大佬的入门、进阶之旅!!!

    前言 本篇文章写了将近一万五千字,整理了关于动态规划系列问题的绝大部分分支,包括动态规划的介绍,相关术语等基础内容,也有区间DP,状压DP等进阶知识. 不管你是刚学习该算法的小白,还是对该算法有了一定 ...

  3. java动态规划鸡蛋问题_动态规划系列/高楼扔鸡蛋问题.md · lipengfei/fucking-algorithm - Gitee.com...

    # 经典动态规划问题:高楼扔鸡蛋 今天要聊一个很经典的算法问题,若干层楼,若干个鸡蛋,让你算出最少的尝试次数,找到鸡蛋恰好摔不碎的那层楼.国内大厂以及谷歌脸书面试都经常考察这道题,只不过他们觉得扔鸡蛋 ...

  4. 九十四、动态规划系列之路径问题

    @Author:Runsen 在动态规划最短路径经常提及,在上几篇介绍过相关的最短路径的问题,介绍过使用Dijkstra算法去求解,但是Dijkstra算法是基于贪心算法,按路径长度递增的次序一步一步 ...

  5. CCF 201409-1 相邻数对

    试题编号: 201409-1 试题名称: 相邻数对 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 ...

  6. CCF201409-1 相邻数对

    试题编号: 201409-1 试题名称: 相邻数对 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 输入的第一 ...

  7. CCF201409-1 相邻数对(100分)【序列处理】

    试题编号: 201409-1 试题名称: 相邻数对 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 ...

  8. CCF201409-1相邻数对(C语言)

    题目 试题编号: 201409-1 试题名称: 相邻数对 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入 ...

  9. python找列表中相邻数的个数_利用python求相邻数的方法示例

    前言 本文主要给大家介绍了关于利用python求相邻数的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 什么是相邻数? 比如5,相邻数为4和6,和5相差1的数,连续相差为1的 ...

最新文章

  1. 面试必过之消息中间件RabbitMQ面试总结大全!
  2. 二、华为云ModelArts零代码实现美食分类识别
  3. Spring学习网址
  4. JS----JavaScript中的作用域和作用域链
  5. 类型“unknown”上不存在属性“foreach”_JavaScript红宝书第四版精简解析系列--映射Map数据类型...
  6. 专访黄翀:东方航空到底用MongoDB做了什么,技术选型为何花落MongoDB?
  7. 为什么资源文件名以类型开头
  8. Android绘制基础及手写绘制实例
  9. 浅谈堆(2016-12-31 09:59)错误更改
  10. Win7 计算机中丢失api-ms-win-core-path-|1-1-0.dll
  11. 深度学习在内窥镜图像方面的研究:
  12. 四个方面分析SEO如何提高网站的权重
  13. 三大指数快速入门和应用
  14. 复习简记转发器、网桥、路由器、网关的功能
  15. ti ds90ub953 与ds90ub954 、ds90ub933的调试总结
  16. 2023年出入境政策-喜忧参半
  17. 医学生学计算机建议,医学生计算机能力的培养
  18. 【ps功能精通】1.简单了解PS
  19. 如何将Blender模型导入Panda3d
  20. hugetable和mysql区别_BigData-MySQL总结大全(一)苏暖人

热门文章

  1. python深度学习include框架_搞事情。《用Python实现深度学习框架》已出版上架。...
  2. Excel 条件格式查重问题
  3. std::tr1::function
  4. android 本地数据库持久化框架,android数据库持久化框架, ormlite框架,
  5. php开发地图导航,百度地图API使用方法详解
  6. 5首2021一些流行好听歌曲的吉他和弦
  7. 代码之外——名人哲语
  8. LT2611UXC 2-PORTLVDS 转HDMI2.0
  9. 钢条切割问题(自顶向下)
  10. 水果店怎么开业吸引客户来,水果店新店开业如何吸引客人