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

成都专业网站建设价格低百度搜索关键词优化方法

成都专业网站建设价格低,百度搜索关键词优化方法,电商网页美工设计,百度地图人工服务问题 问题介绍 有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。 第 i 种物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第…

问题

问题介绍

有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。

第 i 种物品的体积是 vi,价值是 wi。

求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。

输入格式

第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。

接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。

输出格式

输出一个整数,表示最大价值。

讲解

首先要说明的就是,本教程只讲解一般的写法,不讲解优化方法(滚动数组降维),先把基本的思想学会了,然后再去学优化方法的。
相信大多数人刚开始学dp问题的时候碰到的就是01背包问题,dp问题首先就是先定义dp数组所代表的意义(比如说这道题,dp[i][j]所代表的就是选取前i个物品体积不会超过j的最大价值),然后就是判断每一步的状态(比如说这一题就是每一步都要判断是否选择这个物品),然后就是状态转移方程了。
回归本题目,本题的思想就是装前i个物品,然后体积一直增大,每次就是判断选不选这个物品,

  • 如果选这个物品的价值就是dp[i - 1][j - v[i]] + w[i]
    解析:选这一个那么肯定要加上这一个的价值w[i]这里应该没有问题了吧,那为什么前面是dp[i - 1][j - v[i]]呢?因为就是选了这一个物品了,这一个物品占据了v[i]的体积,那么只要找到子问题选i-1个物品,然后体积不大于j-v[i]的最优解就可以了。
  • 如果不选这个物品,就直接从前i-1个物品选体积不大于j的最优解了。
  • 每次判断一下,就是如果这个物品的体积大于现在所能装的最大的体积,那么肯定就是直接不能选择这个物品了。

图解

  • 图片中在中间价值数据中被标黄的数据就是当前物品的体积大于背包当前所能装的最大体积,所以直接就不用选这个物品,直接将上一层的数据拉下来就行了。
  • 图片可能会不好看哈,等我优化。
    01背包.png

基础源码

#include <bits/stdc++.h>using namespace std;const int N = 1010;int n, k;
int v[N], m[N];
int dp[N][N];int main()
{cin >> n >> k;for (int i = 1; i <= n; i ++ ) cin >> v[i] >>m[i];for (int i = 1; i <= n; i ++ ){for (int j = 1; j <= k; j ++ ){if (v[i] > j){dp[i][j] = dp[i - 1][j];}else{dp[i][j] = max(dp[i - 1][j - v[i]] + m[i], dp[i - 1][j]);}}}cout << dp[n][k] << endl;}

一维数组优化

  • 来自几个小时后的我:看了一下y总的视频,突然就会了一维数组的优化方法是怎么写的了。
  • 其实如果上面那个图你从头推了一遍,你就会发现我们更新每一层的数据的时候,其实只用到了上一层的数据而且还是用到上一层数据的范围为–>从上一层起点开始到本层数据正上方的数据。比如说我们要更新第三层第4列的数据,那么其实我们用到的数据范围为,第3-1层第一列到第3-1层第4列。
  • 我们遍历j的时候要从后(最大的体积)向前遍历到v[i]
    • 为什么要从后开始遍历呢?
      因为我们每次更新要用到前面的数据,如果我们从前向后更新,当我们遍历到后边的时候要用到前面的数据但是前面的数据已经更改了,不是第i-1层的数据了,所以我们要从后向前遍历,这样就不会影响到前面的数据。
    • 为什么遍历到v[i]就可以了呢?
      因为就是j<v[i]的时候肯定是不能选这个物品的,直接就是拉取正上方的数据就行,也就相当于不用更改数据。

一维数组优化后源码

#include <iostream>using namespace std;const int N = 1010;int dp[N];
int v[N], w[N];int main()
{int n, m;cin >> n >> m;for (int i = 1; i <= n; i ++ ) cin >> v[i] >> w[i];for (int i = 1; i <= n; i ++ ){for (int j = m; j >= v[i]; j -- ){dp[j] = max(dp[j], dp[j - v[i]] + w[i]);}}cout << dp[m] << '\n';return 0;}
http://www.mnyf.cn/news/38665.html

相关文章:

  • 做视频网站都需要什么软件下载外贸网络营销
  • 国外网站html5从上到下连续变动百度广告联盟价格
  • 石岩网站建设 0755什么是新媒体营销
  • 做一个企业的网站怎么做的百度热搜广告设计公司
  • 在家给别人做网站合法吗114外链
  • 山东电力建设网站网络推广费用高吗
  • 行业公司网站建设网络推广外包想手机蛙软件
  • 评测主题 wordpress百度推广seo是什么意思
  • 美术馆网站建设概述百度网络营销中心app
  • 企业网站cmsseo网络优化软件
  • 营销型企业网站建设教案网站设计方案模板
  • 新泰房产网58个人出售seo的主要工作是什么
  • 做网站开发一般用什么语言电商平台推广方案
  • 网站建设销售好做么seo整站优化吧
  • 2015年做网站行不行沧州百度推广总代理
  • 科技创业seo还有未来吗
  • 政府网站建设服务外包seo大牛
  • 典型的四大综合门户网站常州seo第一人
  • wordpress模块怎么设置在最上层seo快速优化技术
  • 网站seo推广方案前端培训班一般多少钱
  • 陕西自助建站做网站免费网站推广软件
  • 网站开发一般采用什么框架谷歌seo综合查询
  • 高德导航怎么看街景地图搜索引擎优化方法总结
  • 北京网站制作公司飞沐怎么制作一个网站5个网页
  • 中山移动网站设计sem是什么基团
  • 400网站建设电话网络营销推广的5种方法
  • 个人做网站哪种类型的网站好电脑培训班价目表
  • 网站建设的作用快速排名精灵
  • 楚雄市建设规划批前公示在那个网站磁力猫最好磁力搜索引擎
  • 合肥企业网站建设竞价排名适合百度吗