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

用vs2005做网站 怎样搭配色彩百度爱采购推广一个月多少钱

用vs2005做网站 怎样搭配色彩,百度爱采购推广一个月多少钱,wordpress里如何添加ALT标签,做外贸必应网站产品曝光目录 一、分割等和子集-LeetCode 416思路实现代码1.二维dp代码2.一维dp代码 问题总结 一、分割等和子集-LeetCode 416 Leecode链接: leetcode 416 文章链接: 代码随想录 视频链接: B站 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&…

目录

  • 一、分割等和子集-LeetCode 416
    • 思路
    • 实现代码
      • 1.二维dp代码
      • 2.一维dp代码
    • 问题
    • 总结



一、分割等和子集-LeetCode 416

Leecode链接: leetcode 416
文章链接: 代码随想录
视频链接: B站

给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

示例1:

输入:nums = [1,5,11,5]
输出:true
解释:数组可以分割成 [1, 5, 5][11]

思路

本体可以看作一个背包模型,将数组总和除2,将总和一半定义为背包的容量,数组元素为可选的物品。本题既可以定义一个一维dp数组,也可以定义一个二维dp数组,但二维便于理解与讲解并且一维只是二维的精简版,思想基本一致,所以主要写一下二维的思路。数组形式为dp[i][j],i为可选的物品范围,例如当i为3时,表示可选的物品范围为0到3下标的物品任意物品;j表示当前背包的容量大小。dp数组含义为,在j容量下,物品0到i范围可以获得的最大和。递推公式为dp[i][j] = dp[i-1][j]或dp[i][j] = max(dp[i-1][j] , dp[i-1][j-nums[i]] + nums[i])。前者表示不放的情况,后者表示物品放入后可能的情况。不放的条件就是背包容量不足以放下物品,放物品的条件就是当前背包的容量大于或等于当前物品的重量。

实现代码

1.二维dp代码

//cpp
class Solution {
public:bool canPartition(vector<int>& nums) {int sum = 0;int len = nums.size();//物品的数量for(int a:nums){sum += a;} if(sum%2 == 1) return false;int target = sum/2;//既是物品的价值也是物品的重量vector<vector<int>>dp(len,vector<int>(target+1,0));for(int j = nums[0];j<=target;j++){dp[0][j] = nums[0];}for(int i = 1;i<len;i++){for(int j = 0;j<=target;j++){if(j<nums[i]){dp[i][j] = dp[i-1][j];}else {dp[i][j] = max(dp[i-1][j],dp[i-1][j - nums[i]]+nums[i]);}}}if(dp[len-1][target] == target) return true;return false;}
};

2.一维dp代码

//cpp
class Solution {
public:bool canPartition(vector<int>& nums) {//vector<int> dp(10001, 0);int sum = 0;for(int a:nums){sum += a;} if(sum%2 == 1) return false;int t = sum/2;vector<int>dp(t+1,0);for(int i = 0;i<nums.size();i++){for(int j = t;j>=nums[i];j--){dp[j] = max(dp[j],dp[j-nums[i]]+nums[i]);}}if(dp[t] == t) return true;return false;}
};

问题

代码实现细节不熟练,比如初始化时,怎么将第一行的哪些数初始化为恒定值。

总结

一维与二维的区别在于:省去了多余空间的使用,并且改变了遍历顺序,这是因为如果跟二维数组一样从前往后遍历,就会导致重复选择同一个物品。比如,当i = 1时,dp[1] = 1、dp[2] = 1;当i = 2时,dp[1] = 1、dp[2] = 2,显然是不对的因为一件物品只能选一次。虽然一维省去了空间,但时间复杂很高,leetcode上一维dp的执行用时为300ms左右,空间占用达到了10MB左右;二维dp为100ms左右,同样的二维空间占用达到了98MB左右。


http://www.tj-hxxt.cn/news/38237.html

相关文章:

  • 国外域名购买网站域名大全免费网站
  • 做可转债好的网站seo网站推广下载
  • wordpress app制作优化什么
  • 手机网站抢拍是怎么做的郑州百度推广公司
  • 番禺公司网站建设郑州seo技术外包
  • 网站建设一般需要多少钱电脑优化软件哪个好用
  • 网站优化 北京公司网站推广怎么做
  • 中山网站制作费用游戏推广文案
  • 成熟网站开发联系电话网站优化关键词
  • 购物网站建设教程广州新闻头条最新消息
  • 利用电脑做网站百度站长平台官网
  • 快站淘客网站如何优化流程
  • 电脑做网站服务器WIN7 买个域名seo是什么意思中文
  • 日照建站哪家好情感式软文广告
  • 坪地网站建设价格武汉seo关键词优化
  • 做展示空间设计的网站怎么做电商卖东西
  • 自己的网站怎么做优化企业推广软件
  • 风铃网做微网站要钱吗互联网营销模式
  • 上海网站建设报价单微友圈推广平台怎么加入
  • 中国网站排名前100百度网站推广价格查询
  • 厦门网站制作哪里好薇seo诊断服务
  • 湛江免费建站nba总得分排行榜最新
  • 文档下载免费网站百度seo优化技术
  • 企业微网站模版百度网页版
  • php网站地图手机百度网址大全首页
  • 中国建设银行官方网站沈阳十大最免费软件排行榜
  • 毕设做网站需要准备网络营销的五大优势
  • 南京建设网站需要多少钱少儿编程
  • web网站开发公司搜狗推广助手
  • 江西 网站 建设 开发seo岗位有哪些