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

湛江cms建站谢岗网站建设

湛江cms建站,谢岗网站建设,高明公司搜索seo,大连住房保障网官网1. 01 背包(每种物品只能选一次) 思路: 每个物品只能取 0 次或 1 次,求在容量限制内的最大价值。 定义 dp[j] 表示容量 j 时的最大价值。 遍历物品,从后向前遍历容量,防止物品被重复使用。 状态转移方程…

1. 01 背包(每种物品只能选一次)

思路:

  • 每个物品只能取 0 次或 1 次,求在容量限制内的最大价值。

  • 定义 dp[j] 表示容量 j 时的最大价值。

  • 遍历物品,从后向前遍历容量,防止物品被重复使用。

  • 状态转移方程: dp[j] = max(dp[j], dp[j - w[i]] + v[i])

代码模板:

for (int i = 0; i < N; i++) {  // 遍历物品for (int j = V; j >= w[i]; j--) {  // 倒序遍历背包容量dp[j] = Math.max(dp[j], dp[j - w[i]] + v[i]);}
}

示例: 输入:

3 5
2 3
1 2
3 4

计算过程:

  1. 初始化 dp = [0, 0, 0, 0, 0, 0]

  2. 处理第一个物品(重量2,价值3):

    • dp[5] = max(dp[5], dp[3] + 3) = 3

    • dp[4] = max(dp[4], dp[2] + 3) = 3

    • dp[3] = max(dp[3], dp[1] + 3) = 3

    • dp[2] = max(dp[2], dp[0] + 3) = 3

  3. 处理第二个物品(重量1,价值2),依次更新。

  4. 处理第三个物品(重量3,价值4),依次更新。

最终 dp[5] = 5


2. 完全背包(每种物品可以选无限次)

思路:

  • 每个物品可以取无限次。

  • 仍然定义 dp[j],但这次要正序遍历容量。

  • 状态转移方程: dp[j] = max(dp[j], dp[j - w[i]] + v[i])

代码模板:

for (int i = 0; i < N; i++) {  // 遍历物品for (int j = w[i]; j <= V; j++) {  // 正序遍历背包容量dp[j] = Math.max(dp[j], dp[j - w[i]] + v[i]);}
}

示例: 输入:

2 4
1 2
2 4

计算过程:

  1. 初始化 dp = [0, 0, 0, 0, 0]

  2. 处理第一个物品(重量1,价值2):

    • dp[1] = 2, dp[2] = 4, dp[3] = 6, dp[4] = 8

  3. 处理第二个物品(重量2,价值4):

    • dp[2] = 4(不变),dp[3] = 6(不变),dp[4] = 8(不变)

最终 dp[4] = 8


3. 多重背包(每种物品最多选 Si 次)

思路:

  • 直接按照 01 背包 方式处理的时间复杂度较高。

  • 使用 二进制拆分优化,将 s[i] 个物品拆分成若干个 2^k 份,使得 2^0 + 2^1 + ... 覆盖 s[i]

  • 状态转移方程: dp[j] = max(dp[j], dp[j - k * w[i]] + k * v[i])

代码模板(使用二进制优化):

for (int i = 0; i < N; i++) {  // 遍历物品int count = s[i];for (int k = 1; count > 0; k *= 2) {  // 二进制拆分int num = Math.min(k, count);count -= num;int weight = num * w[i];int value = num * v[i];for (int j = V; j >= weight; j--) {  // 01 背包处理dp[j] = Math.max(dp[j], dp[j - weight] + value);}}
}

示例: 输入:

3 10
2 3 3
3 4 2
5 6 2

计算过程(使用二进制优化拆分):

  1. 物品1(重量2,价值3,最多选3次)拆分成 1, 2

    • dp[10] = max(dp[10], dp[8] + 3)

    • dp[8] = max(dp[8], dp[6] + 3)

    • 依次更新 dp[2] = 3, dp[4] = 6, dp[6] = 9

  2. 物品2(重量3,价值4,最多选2次)拆分成 1, 1

    • 依次更新 dp[3] = 4, dp[6] = 8, dp[9] = 12

  3. 物品3(重量5,价值6,最多选2次)拆分成 1, 1

    • dp[5] = 6, dp[10] = 12

最终 dp[10] = 12


总结:

  • 01 背包: 只能选 0 或 1 次,倒序遍历容量。

  • 完全背包: 可选无限次,正序遍历容量。

  • 多重背包: 每种物品最多选 Si 次,二进制拆分优化

http://www.dtcms.com/wzjs/783358.html

相关文章:

  • 搜索引擎网站搭建网站一级页面二级页面怎么做
  • 学校网站的作用和意义网站建设外包还是自己做
  • 二级域名免费网站怎么申请计算机网络技术学什么
  • 专注合肥网站建设图片制作视频软件免费
  • 上海家装设计网站东莞官方网站
  • 做网站设计师网站开发技术的现状及发展趋势
  • 在线咨询网站开发价格网站seo技巧
  • 一般网站开发用什么笔记本今天上海最新新闻事件
  • 某些网站dns解析失败电商网站建设运城
  • 公司网站用什么cms系统设计网站大全湖南岚鸿设计
  • 私人定制网站图片链接怎么生成
  • discuz插件惠州seo网络推广
  • wordpress设置注册页面seo有哪些优缺点?
  • 凡科是免费做网站吗南京最好的网站设计公司
  • 温州网站设计只找亿企邦电子商务网站建设项目的阶段的划分
  • 毕设网站开发什么题目好青海西宁网页网站制作
  • 潍坊模板建站定制大学网站开发实验室建设方案
  • 做ppt的软件模板下载网站有哪些百度收录正常网站流量下降
  • 专门卖电子产品的网站浏阳做网站
  • mip网站模板wordpress 视频
  • 河南高端建设网站wordpress是干嘛用的
  • 免费网站推广文章wordpress 百科主题
  • 网站设计标准字体免费平台发布销售信息
  • 1688网站上自己做模版王也道长头像无水印
  • 交互网站设计自己做网站页面
  • 通化网站推广阳江优化网站排名
  • 公司做网站的费用用途写什么wordpress文章加标题
  • 晋江网站建设洛阳网站制作写软文能赚钱吗
  • 网站建设方案书 模版区网站开发语言
  • 网上做效果图网站有哪些软件有哪些线上如何推广自己的产品