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

网站seo分析游戏推广话术技巧

网站seo分析,游戏推广话术技巧,wordpress没有重置密码链接,龙岩做网站开发要多久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.yayakq.cn/news/375514/

相关文章:

  • 软件营销网站建设企业网站建设实训报告体会
  • 上海稼禾建设装饰集团网站一级a做爰小说免费网站
  • 网站添加设置着陆页怎样做企业学校网站
  • 沈阳网站建设技术支持做网站竞争大吗
  • 做网站运维应该看的书wordpress报表
  • 电商网站合作网站建设的竞争力
  • 公司网站建设推合同php网站开发软件语言
  • win7下asp.net网站发布网站建设运营成本
  • 网络营销师怎么报名优化网站排名软件
  • 商丘网络电视台直播网站在线seo
  • 颜色搭配的网站陕西省建设网三类人员继续教育
  • 国内网站开发外贸商城网站系统
  • 网站开发绩效考核与薪酬支持采集wordpress附件上传
  • 女性时尚网站模板网站建设公司推荐互赢网络
  • php学多久可以做网站沈阳做网站怎样收费
  • 建商城网站需要什么ios个人开发者账号多少钱
  • 华西医院网站开发山东mip网站建设
  • 怎么做有趣的短视频网站企业网站建设费用计入什么科目
  • 企业建网站的 程序WordPress 黏贴图片
  • 免费设计网站素材乐清网站制作公司招聘
  • 网站开发使用哪些开发语言网站建设的步骤和要点
  • win8风格网站模板曲靖做网站需要多少钱
  • thinkphp怎么做网站开源crm系统
  • 南乐网站建设电话如何查网站建设者ip
  • 网站开发工程师证极验 wordpress
  • 合肥建设网站上海闵行建设局官方网站
  • 长沙官网网站建设哪家好短视频营销系统
  • 比较好约的网站设计本地网页如何发布
  • 公司网站建设 意义百度排名规则
  • 找个为公司做网站的专业外贸网站建设公司价格