首页 > 其他分享 >动态规划问题总结

动态规划问题总结

时间:2023-04-19 09:55:33浏览次数:46  
标签:总结 背包 target nums 循环 num 动态 规划 dp

背包问题

参考:希望用一种规律搞定背包问题

分类

排列组合问题

\[dp[i] += dp[i - num[j]] \]

判断问题(true or false)

\[dp[i] = dp[i] || dp[i - num[j]] \]

最大最小问题

\[dp[i] = min(dp[i], dp[i - num[j]] + 1) \]

或者

\[dp[i] = max(dp[i], dp[i - num[j]] + 1) \]

判定与步骤

背包问题具备的特征:给定一个 targettarget 可以是数字也可以是字符串,再给定一个数组 numsnums 中装的可能是数字,也可能是字符串,问:能否使用 nums 中的元素做各种排列组合得到 target

  1. 分析是否为背包问题
  2. 是三种背包问题的哪一种
  3. 是0-1背包问题还是完全背包问题。也就是题目给的nums数组中的元素是否可以重复使用
  4. 如果是排列组合问题,是否需要考虑元素之间的顺序。排列有排列的解法,组合有组合的解法

代码模板

0-1背包

即数组中的元素不可重复使用

nums 放在外循环,target 在内循环,且内循环倒序

for num in nums:
    for i in range(target, nums - 1, -1):

完全背包(组合)

即数组中的元素可重复使用

nums 放在外循环,target 在内循环,且内循环正序

for num in nums:
    for i in range(nums, target + 1):

完全背包(排列)

需考虑元素之间的顺序,需将 target 放在外循环,将 nums 放在内循环

for i in range(1, target + 1):
    for num in nums:

标签:总结,背包,target,nums,循环,num,动态,规划,dp
From: https://www.cnblogs.com/shixuanliu/p/17332196.html

相关文章

  • Python常见问题总结
    对于长期深耕在python爬虫的程序员来说,如何快速解决代码中的问题它是作为合格的程序员应该具备的基本素质。下面将我总结整理出有关python的一些常见问题记录下来方便后期查证。Pythonpython没有多态,而是鸭子类型多继承,没有接口,可通过语法糖实现接口的作用lambda中只能有一句......
  • 带约束条件的运筹规划问题求解(模拟退火算法实现)
    0.写在前面超级简单的模拟退火算法实现ε٩(๑>₃<)۶з搭配最简单的线性规划模型进行讲解!但是如果需要的话可以直接修改编程非线性问题哦(´つヮ⊂︎)1.模型描述及处理1.1线性规划模型\[max\,f(x)=10x_1+9x_2\]\(s.t.\)\[6x_1+5x_2\leq{60}\tag{1}\]\[10x_1+20x_2\leq{......
  • [心路历程]从事自媒体行半年心路历程以及未来规划
    2022年9月13号入职公司10月1号开始正式更新视频总的来说这半年基本保持日更的状态,但明显能感觉自己处于一个瓶颈期需要一个提升自己后期能力水平的学习过程。但半年时间导致我抛弃了很多良好的学习习惯。例如坚持每天学习,记录学习笔记。但是现在开始需要逐步捡回当初学习的......
  • scrum项目冲刺_day5会议总结
    今日团队任务:图片转excel(5天)前端开发(需团队风格统一)调用接口(后端),json数据->excel前后端连接           任烁玚(进行中)            图片转html(8天)前端开发(需团队风格统一)图片转为pdf(存储)pdf转html(调用接口)[html存储到数据库]前后台数据同......
  • 【VRP问题】基于混合遗传算法求解车辆路径规划问题附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 0/1分数规划
    1.0/1分数规划模板例题:poj2976二分求解M,M即为答案#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>usingnamespacestd;structPair{ inta,b;doubley;}p[1005];boolcmp(Paira,Pairb){ returna.y......
  • 4.18学习总结
    用户输入整数n(1<=n<=26)和整数m(m<=n),然后输入n个不同的字母,请编写程序输出在这n个字母中选择m个字母的所有排列序列和组合序列。【源代码程序】import itertools#输入a=input("请输入整数n和整数m的值:")a1=a.split("")for iin a1[::]:    if i=='':    ......
  • scrum项目冲刺_Day7会议总结
    今日团队任务:图片转excel(5天)前端开发(需团队风格统一)调用接口(后端),json数据->excel前后端连接           任烁玚(进行中)            图片转html(8天)前端开发(需团队风格统一)图片转为pdf(存储)pdf转html(调用接口)[html存储到数据库]前后台数据同......
  • 每日总结-23.4.18
    <%@pageimport="zhengcechaxun.Pd_zhengce"%><%@pageimport="zhengcechaxun.Thesql"%><%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>&......
  • 【Vue】Vue路由总结
    由vue-router模块控制,需要额外安装依赖。参考官网npminstallvue-router--save组成router-link路由跳转,类似a标签,路由跳转作用<router-linkto=""/>router-view路由视图,用于其他组件在该视图位置显示。<router-viewname="name"/><!--可以指定视图名,在路由跳转时......