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

宜黄县建设局网站下载百度地图2022最新版官方

宜黄县建设局网站,下载百度地图2022最新版官方,凡客官网首页,抖音seo推广1.多重背包问题 经典的多重背包问题和01背包问题的相似之处在于二者的一维遍历顺序都是从右侧往左侧遍历。 同时多重背包的一维写法不比二维写法降低时间复杂度。 2.多重背包标准写法:(平铺展开形式) class Solution {public int maxValue(int N, int C, int[] s…

1.多重背包问题

 经典的多重背包问题和01背包问题的相似之处在于二者的一维遍历顺序都是从右侧往左侧遍历。

同时多重背包的一维写法比二维写法降低时间复杂度。

2.多重背包标准写法:(平铺展开形式)

class Solution {public int maxValue(int N, int C, int[] s, int[] v, int[] w) {int[] dp = new int[C + 1];for (int i = 0; i < N; i++) {for (int j = C; j >= v[i]; j--) {for (int k = 0; k <= s[i] && j >= k * v[i]; k++) {dp[j] = Math.max(dp[j], dp[j - k * v[i]] + k * w[i]);}}}return dp[C];}
}

因为转换为一维之后,无法记录每个物品的使用次数,所以多重背包的一维写法并不能减低时间复杂度,注意完全版背包的一维写法是能够降低时间复杂度的。此处的代码与01背包十分相似。01背包的代码如下:

class Solution {public int maxValue(int N, int C, int[] v, int[] w) {int[] dp = new int[C + 1];for (int i = 0; i < N; i++) {for (int j = C; j >= v[i]; j--) {// 不选该物品int n = dp[j]; // 选择该物品int y = dp[j-v[i]] + w[i]; dp[j] = Math.max(n, y);}}return dp[C];}
}

3.二进制压缩形式的多重背包

上述的多重背包的解法实际上是将带选择的m个物品平着展开为[1,1,1....](共计m个),具体可以查看最后一个for循环的写法,不断尝试一个一个的将数据加进去。

实际上这种解法只能解决数据量为平方级别的数据。而二进制解法则是将原本为 n 的物品用 ceil(log(n)) 个数来代替,从而降低算法复杂度。

学过 Linux 的都知道文件权限最高是 7,代表拥有读、写、执行的权限,但其实这个 7 是对应了 1、2、4 三个数字的,也就是 r:1w:2x:4 ,三种权限的组合共有 8 种可能性

7 可以用 1、2、4 来代替,像刚刚提到的 10 ,我们可以使用 1、2、4、3 来代替,你可能会有疑问,为什么是 1、2、4、3,而不是 1、2、4、6 或者 1、2、4、8 呢?

其实把他们几个数加起来就知道了,1、2、4、6 可以表达的范围是 0~13,而 1、2、4、8 可以表达的范围是 0~15,而我们要求的是表达 10,大于 10 的范围是不能被选择的。

所以我们可以在 1、2、4 (表达的范围是 0~7)的基础上,增加一个数 3(由 10 - 7 而来),这样就能满足我们需要表达的范围 0~10。

具体的转换为二进制的代码如下所示:

class Solution {public int maxValue(int N, int C, int[] s, int[] v, int[] w) {// 扁平化List<Integer> worth = new ArrayList<>();List<Integer> volume = new ArrayList<>();// 我们希望每件物品都进行扁平化,所以首先遍历所有的物品for (int i = 0; i < N; i++) {// 获取每件物品的出现次数int val = s[i];// 进行扁平化:如果一件物品规定的使用次数为 7 次,我们将其扁平化为三件物品:1*重量&1*价值、2*重量&2*价值、4*重量&4*价值// 三件物品都不选对应了我们使用该物品 0 次的情况、只选择第一件扁平物品对应使用该物品 1 次的情况、只选择第二件扁平物品对应使用该物品 2 次的情况,只选择第一件和第二件扁平物品对应了使用该物品 3 次的情况 ... //注意此处是等号,可能正好减完for (int k = 1; k <= val; k *= 2) { val -= k;worth.add(w[i] * k);volume.add(v[i] * k);}if (val > 0) {//没有正好减完worth.add(w[i] * val);volume.add(v[i] * val);}}// 0-1 背包问题解决方案int[] dp = new int[C + 1];for (int i = 0; i < worth.size(); i++) {for (int j = C; j >= volume.get(i); j--) {dp[j] = Math.max(dp[j], dp[j - volume.get(i)] + worth.get(i));}}return dp[C];}
}

http://www.hrbkazy.com/news/46386.html

相关文章:

  • 网页翻译成中文后怎么还原网站优化推广费用
  • 重庆建设工程信息网官网入口网页百中搜优化软件靠谱吗
  • 高端建设网站公司cpa推广联盟平台
  • 公司为什么建立网站域名收录查询工具
  • 做网站建设的网络公司经营范围怎样填国际大新闻最新消息
  • 网站建设需要的条件2345浏览器主页网址
  • 信息服务平台怎么赚钱百度优化培训
  • qq临时会话网站搜易网服务内容
  • 官方网站制作思路常见的搜索引擎
  • 手机网站无法访问的解决方法肇庆seo按天收费
  • 做ui设计用什么网站站长平台百度
  • 做旅游网站的yi小程序开发文档
  • wordpress还原回收站南昌seo排名公司
  • 淄博临淄网站建设百度小说搜索热度排行榜
  • 网站开发 平面设计最有效的线上推广方式
  • 个人适合网站类型网站如何让百度收录
  • 南充网站建设略奥东莞做网站公司电话
  • 内蒙古建信建设有限公司网站东莞公司seo优化
  • 微商城开发公司什么是seo标题优化
  • 专业制作网站多少钱seo网站营销推广公司
  • 模板网站与定制网站的价格武汉百度开户电话
  • 做网站要注意哪些问题宁波网络优化seo
  • wdcp wordpress forbidden 403北京优化推广公司
  • 网上赚钱的副业哈尔滨seo关键词优化
  • 做网站深圳网站销售怎么推广
  • wordpress更改了域名 图片不显示seo是什么东西
  • 写字就能赚钱做网站灰色词快速排名接单
  • 网站建设对数据库有何要求网站模板套用教程
  • 豫港大厦 做网站网页制作免费网站制作
  • asp.net做报名网站买卖网交易平台