kSum

关于3Sum可以,先遍历第一个数,剩下的和求2Sum

对于kSum的问题,很容易想到使用动态规划,问题规模由3个方面:元素个数n,kSum的k,以及目标target

状态方程为:dp[n][k][target] = dp[n-1][k-1][target-arr[n]] (选第n个数)+ dp[n-1][k][target](不选第n个数)

为可能性问题,最后必须装满,也就是k=0时,target =0才能时找到了一个方案,所以dp[n][k][target] = dp[n-1][k-1][target-arr[n]] or dp[n-1][k][target]

import numpy as np
def kSum(arr,target,k):n = len(arr)dp = np.full((n+1,k+1,target+1),False)# 初始化,为可能性问题,也就是最后必须k和target都用完了,才是最后的解# 不能使用dp[:][0][0] = True,这两个的赋值不一样,这里是一个容易出错的地方for i in range(n+1):dp[i][0][0] = Truefor i in range(1,n+1):for j in range(1,k+1):# 这里是一个剪枝,假如k小于元素个数就没有必要考虑了if j <= i:for l in range(1,target+1):# 注意边界,假如l-arr[i-1]<0,就没有意义了,只能取左边if l-arr[i-1] >=0:dp[i][j][l] = dp[i-1][j][l] or dp[i-1][j-1][l-arr[i-1]]else:dp[i][j][l] = dp[i-1][j][l]return dp[n][k][target]arr = [16,7,8,44,2,4,5,97,5,3]
print(kSum(arr,99,3))
print(kSum(arr,102,3))False
True

kSum,实现方式,动态规划相关推荐

  1. 动态规划求解最长公共子序列

    前言 推出一个新系列,<看图轻松理解数据结构和算法>,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握.本系列包括各种堆.各种队列.各种列表.各种树.各种图.各种排序等等几十篇的 ...

  2. 动态规划漫谈(面向初学者的自学总结)

    目录 0. 名字的由来 1. 动态规划的适用条件 1.1 最优子结构(optimal substructure) 1.2 重叠子问题(overlapping subproblems) 1.3  无后效 ...

  3. 算法之【动态规划】详解(python)

    算法之动态规划详解 定义 动态规划其实是一种运筹学方法,是在多轮决策过程中寻找最优解的方法. 应用场景 动态规划问题的一般形式就是求最值.动态规划其实是运筹学的一种最优化方法,只不过在计算机问题上应用 ...

  4. DP动态规划企业级模板分析(数字三角,上升序列,背包,状态机,压缩DP)

    前言 经过基础的算法模型讲解和题海战术,将DP动态规划这个重点呢考纲进行细分题类型,此篇是上半章节的DP动态分析提升题.主要包括数字三角形,以及最大上升序列,背包问题,状态机的拆分以及优化状态机的压缩 ...

  5. 算法:动态规划(1.钢条切割)

    [齐天的博客]转载请注明出处(万分感谢!): https://blog.csdn.net/qijinglai/article/details/94324251 Dynamic programming ...

  6. 编辑距离——莱文斯坦距离(Levenshtein distance)

    在信息论和计算机科学中,莱文斯坦距离是一种两个字符串序列的距离度量.形式化地说,两个单词的莱文斯坦距离是一个单词变成另一个单词要求的最少单个字符编辑数量(如:删除.插入和替换).莱文斯坦距离也被称做编 ...

  7. [AcWing], 蒙德里安的梦想

    蒙德里安的梦想 题目来源 问题分析 预处理合法的摆放方式 动态规划 初始化状态集 结果 完整代码 题目来源 https://www.acwing.com/problem/content/descrip ...

  8. 数组子序列累加和求余数之后的最大值问题详解

    给定一个非负的数组arr,和一个正数m,返回arr中所有子序列累加和对m求余数之后的最大值 1.如果arr中每个数字不大,怎么做这道题? 2.如果arr中m的值很小,怎么做这道题? 3.如果arr的长 ...

  9. OpenBox:软件定义时间敏感网络系统全家桶

    一.引言 软件定义时间敏感网络系统是在软件定义网络框架下融入了时间敏感网络技术的综合性网络系统.该系统既具备软件定义网络的组网灵活性.协议无关转发的高适应性.转发控制分离的高效性与可控性,同时又有低延 ...

  10. 社招阿里java岗到底有多难?分享阿里社招面试真题(附答案),以及P7需要掌握的知识点总结!

    前言 本来是抱着想试试淘系技术部的心态,没想到一路走完了流程,这里前辈水平的确很高,面试就感觉出来了,想把过程中的面经分享给大家: 一面 线程池了解吗,几种线程池创建方式 ThreadPoolExec ...

最新文章

  1. Cloud Native Computing Foundation Welcomes the NATS Messaging Protocol into the Fold
  2. linux-时间日期类
  3. 2018双一流排名 计算机,2018中国双一流高校名单
  4. php打开网页执行即执行bat程序_CVE202011107:XAMPP任意命令执行漏洞复现
  5. android编程fragment,详解Android中Fragment的两种创建方式
  6. iPhone 居然能当公交卡刷了?!
  7. 系统Model底层隐藏的坑
  8. python的pandas行数和索引_python – 使用索引值访问Pandas Data Frame行
  9. js实现外链访问劫持代码 可劫持百度快照
  10. 《计算机网络》-- 第一章 概述
  11. vuepress-theme-reco博客项目部署github
  12. 预留度数Rx表达式的推导
  13. 基于BM1684移植YOLOV7
  14. c# 微软 REST API语音转文字
  15. 一个专门泄露数据库的黑产论坛的数据库被泄露
  16. 利用计算机模拟地理实验,虚拟地理实验在中学地理教学的应用论文
  17. 虚拟机里的服务器怎么实现联网,如何实现nat方式的VMware虚拟机联网
  18. caffe源码 layer分析
  19. 关于赞同科技项目的收获
  20. 在ros使用for auto报错

热门文章

  1. MySQL 中ANALYZE [LOCAL NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
  2. java中jtansforms,java – 使用AffineTransform旋转图像
  3. 电脑测速软件_不服跑个分!常见固态硬盘测速工具性价比盘点(上)
  4. mysql datetime转date_一个MySQL时间戳精度引发的血案
  5. vue 生产word_nodejs(officegen)+vue(axios)在客户端导出word文档
  6. webstorm 两个文件对比不同_DOS 入门到精通 使用 fc 命令比较两个文件,并逐一显示不同之处...
  7. linux查文件名称唯美,第二章、Linux常用命令
  8. vue 修改favicon
  9. “git pull” 强制覆盖本地文件
  10. 零拷贝和java NIO