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

西宁网络公司做网站哪家好网站制作设及的技术

西宁网络公司做网站哪家好,网站制作设及的技术,上海闵行有阳性了,大连网站建设动态01背包理论基础 问题定义#xff1a;有n件物品和一个能装重量为w的背包#xff0c;第i件物品的重量是weight[i]#xff0c;得到的价值是value[i]。每件物品只能用一次#xff0c;求解将哪些物品装入背包获得的总价值最大。dp数组含义#xff1a;dp[i][j] 表示从下标为 [0…01背包理论基础 问题定义有n件物品和一个能装重量为w的背包第i件物品的重量是weight[i]得到的价值是value[i]。每件物品只能用一次求解将哪些物品装入背包获得的总价值最大。dp数组含义dp[i][j] 表示从下标为 [0,i] 的物品中选放进容量为j的背包中能得到的最大价值总和。确定递推公式在推导 dp[i][j] 时有两个方面一是不放物品i因为不放i物品所以dp[i][j] dp[i - 1][j]是只放前 i-1 个物品时的最大值二是放物品idp[i][j] dp[i - 1][j - weight[i]] value[i]。当背包容量小于i号物品重量时赋值第一方面的值否则赋值为两种情况的最大值。确定初始化dp[i][0] 由于背包容量为0根本放不进物品所以初始化为0。dp[0][j] 只放0号物品当 j weight[0] 时有值value[0]其他情况为0。遍历顺序这是重点要决定当前的状态必须由其左上角的状态决定。先遍历物品还是先背包容量都是可以的。 #include bits/stdc.h using namespace std; int n, bagweight; void solve() {vectorint weight(n, 0);vectorint value(n, 0);for(int i 0; i n; i) {cin weight[i];}for(int i 0; i n; i) {cin value[i];}vectorvectorint dp(n, vectorint(bagweight 1, 0));for(int i weight[0]; i bagweight; i) { // 初始化dp[0][i] value[0];}for(int i 1; i n; i) {for(int j 1; j bagweight; j) {if(j weight[i]) dp[i][j] dp[i - 1][j]; // 递推公式else dp[i][j] max(dp[i - 1][j], dp[i - 1][j - weight[i]] value[i]);}}cout dp[n - 1][bagweight] endl; } int main() {while(cin n bagweight) {solve();}return 0; }滚动数组空间优化 我们观察二维数组的递推式可以发现 dp[i][j] 只与 i - 1 那一层的状态有关。因此可以用一个一维数组来表示状态。 dp[j] 表示容量为 j 的背包能获得的最大价值总和。因为在当前遍历过程中 dp 中存储的就是上一层的状态因此状态递推式为 dp[j] max(dp[j], dp[j - weight[i]] value[i])初始化下标0位置一定初始化为0其他位置为了递推式中的取最大值服务也初始化为0即可。遍历顺序背包容量的遍历需要从大到小倒序遍历是为了保证物品i只被放入一次。当前遍历中未处理的部分都是i-1那一层的值因此只有倒序遍历才能保证用到的状态没用过物品i。另一方面我们更新状态需要知道当前位置左侧的i-1状态 (j-weight[i])正序遍历就让左侧的状态变成当前层的。 #include bits/stdc.h using namespace std; int main() {int n, bagweight;while(cin n bagweight) {vectorint weight(n, 0);vectorint value(n, 0);for(int i 0; i n; i) {cin weight[i];}for(int i 0; i n; i) {cin value[i];}vectorint dp(bagweight 1, 0);for(int i 0; i n; i) {for(int j bagweight; j weight[i]; j--) {dp[j] max(dp[j], dp[j - weight[i]] value[i]);}}cout dp[bagweight] endl;}return 0; }分割等和子集 其实用回溯可解但是会超时。因为每一个元素只能用一次考虑01背包试一下。 背包的大小为 sum / 2每一个元素看做物品其重量为元素值价值也为元素值。问题就转换成在sum / 2的背包中放入元素让背包尽可能的满由于重量等于价值就变成让价值总和尽量大最终查看最大值是否与sum / 2相等就能判断能不能分割。 class Solution{ public:bool canPartition(vectorint nums) {int sum 0;for(int num : nums) {sum num;}if(sum % 2) return false; // 和为奇数不可能分成相等的两份int target sum / 2; // 背包大小vectorint dp(target 1, 0);for(int i 0; i nums.size(); i) {for(int j target; j nums[i]; j--) {dp[j] max(dp[j], dp[j - nums[i]] nums[i]);}}return dp[target] target;} };
http://www.zqtcl.cn/news/714969/

相关文章:

  • 移动端网站如何开发市辖区郑州网站建设
  • 山东省双体系建设网站wordpress 帮助 主题
  • 手机怎么做三个视频网站网站建设协议一百互联
  • 创建一个网站一般步骤有哪些安徽软件定制开发
  • 网站建设平台协议书模板下载佳木斯建网站的
  • 部队网站建设招标二级域名注册平台
  • 做网站怎么调用栏目织梦搞笑图片网站源码
  • 开个小网站要怎么做南宁seo外包服务商
  • 济宁做网站的企业app网站开发学习
  • 哪个网站可以做危险化学品供求html静态网站作品
  • 豪圣建设项目管理网站创建网站的视频
  • 网站做接口自己做的网站只能用谷歌浏览器打开
  • 建设网站具体步骤python 做 网站
  • 网站源代码怎么上传wordpress标题字体大小
  • 营销型网站哪家好网页设计一张多少钱
  • 怎么搭建购物网站山东德州网站建设
  • 网站 404 错误页面是否自动跳转太原网站建设王道下拉惠
  • 美仑-专门做服装的网站淘宝详情页制作
  • 网站商城制作策划公司组织结构图
  • 商务网站建设教程企网
  • 北京做网站推广多少钱丽水网站建设公司排名
  • 淄博网站关键词优化安丘网站建设公司
  • 教育建设网站wordpress 创建模板文件
  • 门户网站开发视频教学百度关键词怎么刷上去
  • 做网站搞流量挂联盟广告变现新媒体营销心得体会
  • 网站做信息流网站如何做担保交易平台
  • php网站后台访问统计分析互联网营销师题库
  • 提供建站服务的网络公司的比较注册网站域名后免费建站
  • 颍上建设网站长江商学院 网站建设
  • 做酒店销售上哪个网站好东莞出租车公司