当前位置: 首页 > news >正文

有关网站建设的外文文献沈阳单页网站制作

有关网站建设的外文文献,沈阳单页网站制作,建设部网站材料价格上涨规定,厦门网站设计公司找哪家厦门电商系统背包问题常见类型: 动态规划问题核心就两个:状态转移方程和遍历顺序 如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。 状态转移方程是动态规划问题中的核心&…

背包问题常见类型:

动态规划问题核心就两个:状态转移方程和遍历顺序

  • 如果求组合数就是外层for循环遍历物品,内层for遍历背包。
  • 如果求排列数就是外层for遍历背包,内层for循环遍历物品。
    状态转移方程是动态规划问题中的核心,它描述了问题的最优子结构,即当前问题的解与子问题的解之间的关系。
  1. 组合问题:
    • 问题描述:从一组元素中选择若干个元素组成一个组合,满足特定的条件。
    • !!!如果排列组合都列出来的话,只能使用回溯算法爆搜。
    • 状态表示:通常使用二维数组dp[i][j],其中i表示考虑前i个元素,j表示目标值。
    • 状态转移方程:
      dp[i][j] = dp[i-1][j] + dp[i-1][j-nums[i]]
      
      其中,dp[i-1][j]表示不选择第i个元素,dp[i-1][j-nums[i]]表示选择第i个元素。
      例子:(力扣518题兑硬币组合数)
class Solution:def change(self, amount: int, coins: List[int]) -> int:#动态规划 dp = [0]*(amount+1) #+1是考虑初始也算一种合法情况dp[0] = 1   **#组合问题常常初始状态为1 (即也算一种情况)这样才有数值基础**for coin in coins:for i in range(coin,amount+1): **#从coin开始遍历确保可以重复使用**dp[i] = dp[i] + dp[i-coin]return dp[amount]

  1. True、False问题(布尔型动态规划):

    • 问题描述:问题的解可以用True或False表示,通常用于判断某种条件是否成立。
    • 状态表示:通常使用二维数组dp[i][j],其中i表示考虑前i个元素,j表示某种状态(例如是否匹配)。
    • 状态转移方程:
       

      dp[i][j] = dp[i-1][j] or dp[i-1][j-something]

      其中,dp[i-1][j]表示不选择第i个元素,dp[i-1][j-something]表示选择第i个元素,其中something表示某种条件。
  2. 最大最小问题:

    • 问题描述:寻找一组元素中的最大值或最小值,通常是在满足一些条件的情况下。
    • 状态表示:通常使用一维数组dp[i],其中i表示考虑前i个元素。
    • 状态转移方程:
       

      dp[i] = max/min(dp[i-1], dp[i-2], ..., dp[0])

      其中,max/min表示取最大值或最小值。

背包问题解题步骤:

  1. 问题分类:

    • 判断是否为背包问题。
    • 区分三种典型背包问题类型:0-1背包、完全背包、多重背包。
  2. 具体问题分析:

    • 判断是0-1背包问题还是完全背包问题,即是否允许重复使用数组中的元素。
    • 对于组合问题,考虑元素之间的顺序,决定遍历的顺序。

背包问题特征:

  • 给定目标值(target)和一个数组(nums),目标是利用数组中的元素进行排列组合,使其得到目标值。

背包问题技巧:

  1. 0-1背包问题:
    • 元素不可重复使用。
    • 外循环遍历数组(nums),内循环从目标值(target)开始递减。
for num in nums:for i in range(target, num-1, -1):
#关于逆序问题  (所以一维dp数组的背包在遍历顺序上和二维其实是有很大差异的 参考:[https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-2.html#%E6%80%9D%E8%B7%AF]() )不是所有的0-1背包问题都需要逆序遍历,但逆序遍历是一种常见的做法,特别是在动态规划中,它有助于确保每个物品只被考虑一次。逆序遍历的原因是为了保证在更新状态时,不会影响当前状态之后的计算。具体来说,如果我们正序遍历,当考虑第i个物品时,可能会用到第i-1个物品的状态,而如果正序遍 历,第i-1个物品的状态可能已经被当前循环更新过,导致结果错误。逆序遍历的循环结构通常是这样的:```pythonfor i in range(target, num-1, -1):# 在这里进行状态更新和决策```在这个循环中,我们从目标值(target)开始递减,逐步考虑每个可能的背包容量,确保在更新状态时不会影响之后的状态。
  1. 完全背包问题:
    • 元素可重复使用。
    • 外循环遍历数组(nums),内循环从目标值(target)开始递增。
for num in nums: for i in range(num, target+1):
  1. 组合问题考虑元素顺序:
    • 目标值放在外循环,数组放在内循环。
for i in range(1, target+1): for num in nums:

代码示例:

class Solution:def combinationSum4(self, nums: List[int], target: int) -> int:if not nums:return 0dp = [0] * (target+1)dp[0] = 1for i in range(1, target+1):for num in nums:if i >= num:dp[i] += dp[i-num]return dp[target]

http://www.dtcms.com/a/552575.html

相关文章:

  • 网页设计与制作题库及答案360搜索引擎优化
  • 咖啡厅网站开发目标手机版wordpress怎么用
  • 桂阳网站设计盖县网站开发
  • 做网站负责人风险广州seo优化推广
  • 施坦威网站关于我们太阳能灯网站建设
  • 网站建设时间安排表网站备案后有什么好处
  • 微信做引流网站南宁网站建设蓝云
  • 网站基本模块软件开发培训机构怎么鉴定好坏
  • 常州网站排名优化桐城市美丽乡村建设专题网站
  • 如何用魔方网表做门户网站国家企业信用公示官方
  • 深圳罗湖做网站公司哪家好局域网网页制作
  • 免费的黄金网站有哪些如何做网站需求表格清单
  • 哪些网站上可以做租车免费营销型wordpress模板
  • 网站建设平台设备溧阳市建设网站
  • 使用flask做前后端分离的网站欧美网站建设风格特点
  • 茶叶 企业 网站建设眉山 网站开发
  • 档案网站建设外包公司做网页引用别的网站的视频
  • 石家庄网站建设seo公司医院网站建设与维护题库
  • 深圳服装外贸网站建设丘里奇网站排名
  • 华邦网站惠州网站建设价格
  • 网站可以增加关键词吗电子商务网站运营流程
  • 微信链接的微网站怎么做dw怎么建设网站
  • 电销如何介绍网站建设东西湖区城乡建设局网站
  • 网站做301根目录在哪里百度小说搜索热度排行榜
  • 网站开发设置用户做网站定制开发的公司
  • 长春企业自助建站系统wordpress 文章参数
  • 中国做网站最好的好康的网站代码
  • 教育培训网站模板下载友情链接可以随便找链接加吗
  • 免费html网站模板南昌有限公司 网站
  • 台州网站建设网站推广公众号入口