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

服务外包企业有哪些seo入门到精通

服务外包企业有哪些,seo入门到精通,如何完整地备份wordpress,WordPress360收录这段代码实现了0-1 背包问题的动态规划解法,并且使用了滚动数组来优化空间复杂度。以下是代码的详细思路解析: 1. 问题背景 给定 n 个物品,每个物品有其体积 v[i] 和价值 w[i],以及一个容量为 m 的背包。目标是选择物品使得总价值…

这段代码实现了0-1 背包问题的动态规划解法,并且使用了滚动数组来优化空间复杂度。以下是代码的详细思路解析:


1. 问题背景

给定 n 个物品,每个物品有其体积 v[i] 和价值 w[i],以及一个容量为 m 的背包。目标是选择物品使得总价值最大,同时总容量不超过背包的容量。

2. 动态规划的概念

动态规划是一种常用的算法技巧,用于解决具有重叠子问题和最优子结构的问题。在 0-1 背包问题中,动态规划通过维护一个一维数组 f 来记录不同状态下的最大价值。

3. 代码逻辑解析

(1) 输入数据
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> v[i] >> w[i];
  • 用户输入物品数量 n 和背包容量 m

  • 对于每个物品,输入其体积 v[i] 和价值 w[i]

(2) 动态规划状态转移
for (int i = 1; i <= n; i++)for (int j = m; j >= v[i]; j--)f[j] = max(f[j], f[j - v[i]] + w[i]);
  1. 外层循环

    • 遍历每个物品,从第 1 个到第 n 个。

  2. 内层循环

    • 遍历背包的每个容量,从 mv[i](逆序遍历)。

    • 逆序遍历的原因是避免重复使用同一个物品。如果正序遍历,同一个物品可能会被多次使用,从而变成完全背包问题。

  3. 状态转移

    • f[j] 表示在容量为 j 的背包下的最大价值。

    • 不选择第 i 个物品f[j] 保持不变。

    • 选择第 i 个物品:如果当前容量 j 大于等于第 i 个物品的体积 v[i],则可以考虑选择第 i 个物品,更新 f[j]f[j - v[i]] + w[i],即在容量为 j - v[i] 的背包下的最大价值加上第 i 个物品的价值。

(3) 输出结果
cout << f[m] << endl;
  • 输出最终的最大价值,即 f[m]

4. 代码效率分析

  • 时间复杂度

    • 两层循环遍历所有物品和所有容量,时间复杂度为 O(n × m)

  • 空间复杂度

    • 使用了一个一维数组 f,空间复杂度为 O(m)

5. 示例运行

输入:
3 5
1 2
2 3
3 4
运行过程:
  1. 输入数据

    • n = 3, m = 5

    • v = [1, 2, 3], w = [2, 3, 4]

  2. 动态规划状态转移

    • 初始化 f 数组为 0。

    • 对于第 1 个物品:

      • f[5] = max(f[5], f[4] + 2) = 2

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

      • f[3] = max(f[3], f[2] + 2) = 2

      • f[2] = max(f[2], f[1] + 2) = 2

      • f[1] = max(f[1], f[0] + 2) = 2

    • 对于第 2 个物品:

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

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

      • f[3] = max(f[3], f[1] + 3) = 5

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

    • 对于第 3 个物品:

      • f[5] = max(f[5], f[2] + 4) = 7

      • f[4] = max(f[4], f[1] + 4) = 6

      • f[3] = max(f[3], f[0] + 4) = 4

输出:
7

6. 总结

这段代码的核心思路是通过动态规划解决 0-1 背包问题,并使用滚动数组优化空间复杂度。通过维护一个一维数组 f,记录不同状态下的最大价值,并通过状态转移方程更新最大价值,最终找到在给定背包容量下的最大价值。这种方法的时间复杂度为 O(n × m),空间复杂度为 O(m),适用于中等规模的 0-1 背包问题。

完整代码

#include<bits/stdc++.h>
using namespace std;// 定义数组的最大长度
const int N = 1010;
// n 代表物品的数量,m 代表背包的容量
int n, m;
// v 数组用来存储每个物品的体积,w 数组用来存储每个物品的价值
int v[N], w[N];
// f 数组是一维数组,f[j] 表示背包容量为 j 时能获得的最大价值
int f[N];int main()
{// 输入物品的数量 n 和背包的容量 mcin >> n >> m;// 循环读入每个物品的体积和价值for(int i = 1; i <= n; i ++) cin >> v[i] >> w[i];// 动态规划过程,外层循环遍历每个物品for(int i = 1; i <= n; i ++)// 内层循环从背包的最大容量 m 开始,递减到当前物品的体积 v[i]for(int j = m; j >= v[i]; j --)// 比较不选择第 i 个物品和选择第 i 个物品两种情况下的最大价值// 不选择第 i 个物品时,f[j] 保持不变// 选择第 i 个物品时,价值为 f[j - v[i]] + w[i]f[j] = max(f[j], f[j - v[i]] + w[i]);// 输出背包容量为 m 时能获得的最大价值cout << f[m] << endl;return 0;
}

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

相关文章:

  • 南开集团网站建设推广方案
  • 不属于常用网站建设的是搜索引擎营销的主要模式
  • 网站是做o2o还是b2c好关键词排名优化官网
  • 美食网站 怎么做竹子建站官网
  • 企业咨询服务seo自媒体培训
  • 网站首页设计大赛夜狼seo
  • app推广引流渠道seo行业岗位有哪些
  • 企业做网站哪个最好手机百度2020
  • 用什么程序做网站百度账号怎么改名字
  • 武汉建设招投标网站现在外贸推广做哪个平台
  • 微商城网站开发百度排名竞价
  • 越南人一般去哪个网站做贸易百度seo学院
  • wordpress入门全套视频教程seo搜索引擎营销工具
  • 在线做网站做网站设计的公司
  • 建设部166号令住建部网站厦门百度关键词推广
  • 惠州专业网站建设价格微商怎样让客源主动加你
  • 中国中建设计集团有限公司seo教程网
  • 推荐个做淘宝主图视频的网站sem论坛
  • 做壁纸的网站91关键词
  • 网页设计工作目标便宜的seo官网优化
  • 广安发展建设集团公司网站搜索引擎优化文献
  • 免费的分销小程序优化营商环境评价
  • 个人网站托管站长推荐产品
  • 做网站应该拿多少提成百度竞价推广怎么收费
  • 专业做制作网站百度公司推广
  • 网站外链建设有利于增加网站收录大型的营销型网站
  • 做音乐网站首页要求知名的搜索引擎优化
  • wordpress 显示点击数宁波seo在线优化公司
  • 北京管庄网站建设公司网推平台有哪些
  • 贵阳做企业网站网站seo优化包括哪些方面