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

如何做英文网站网络推广是什么意思

如何做英文网站,网络推广是什么意思,视频网站用户增长怎么做,已有网站开发app目录 动态规划&#xff1a;01背包理论基础416. 分割等和子集 动态规划&#xff1a;01背包理论基础 文章链接&#xff1a;代码随想录 题目链接&#xff1a;卡码网&#xff1a;46. 携带研究材料 01背包问题 二维数组解法&#xff1a; #include <bits/stdc.h> using namesp…

目录

  • 动态规划:01背包理论基础
  • 416. 分割等和子集

动态规划:01背包理论基础

文章链接:代码随想录
题目链接:卡码网:46. 携带研究材料

01背包问题
二维数组解法:

#include <bits/stdc++.h>
using namespace std;void slove(int M, int N){vector<vector<int>> dp(M, vector<int> (N + 1));vector<int> weight(M), value(M);for (int i = 0; i < M; i++){cin >> weight[i];}for (int i = 0; i < M; i++){cin >> value[i];}for (int j = 0; j <= N; j++){if (j >= weight[0]) dp[0][j] = value[0];}for (int i = 1; i < M; i++){for (int j = 0; j <= N;  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[M - 1][N] << endl;
}int main(){int M, N;cin >> M >> N;slove(M, N);return 0;
}

思路:就是按代码随想录上的那张二维表来看,更新 j 重量下的背包能放0 - i 中多少最大价值的物品;然后一行一行的更新,更新到新物品时,要么就是在 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]);

其中,

dp[i - 1][j]

代表不放入 i 物品

dp[i - 1][j - weight[i]] + value[i]

代表在 j 重量下先空出weight[i]这么大的空间,然后再放如 i 物品,它可能是本来就有这么大空间,也可能是把其它一些物品拿出去后再放入的 i 物品。

一维(滚动数组)数组解法:

#include <bits/stdc++.h>
using namespace std;void slove(int M, int N){vector<int> dp(N + 1, 0);vector<int> weight(M), value(M);for (int i = 0; i < M; i++){cin >> weight[i];}for (int i = 0; i < M; i++){cin >> value[i];}for (int i = 0; i < M; i++){for (int j = N; j >= weight[i]; j--){dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);}}cout << dp[N] << endl;
}int main(){int M, N;cin >> M >> N;slove(M, N);return 0;
}

一维数组相比二维数组解法就是将每次更新都放在一行上,而且省去了初始化,所以会节省很多空间,这点在后面 leetcode 上的那题会看到比较。另外要注意在遍历重量时是倒序遍历的:

dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);

正序遍历会引起重复,而二维数组不会重复是因为每行都用的是上一行的值来更新的。
第一天理解的时候迷迷糊糊,第二天没事时有想了一会突然茅塞顿开了哈哈哈。

416. 分割等和子集

文章链接:代码随想录
题目链接:416. 分割等和子集

思路:01背包应用问题,留足背包的容量,也就是最大总和的一半值加一,如果更新到最后在半值重量的背包中能正好装满,就说明数组可以对半分。
二维数组解法:

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

一维(滚动)数组解法:

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


这里可以看出两种解法的时间空间对比,显然二维解法有着更大的时间和空间复杂度。因此以后的应用问题尽可能一维(滚动)数组解法。

第四十二天补卡,这两天回学校吃组饭,又耽误了两天,后面那顿饭你不行不去吃了;大体知识能串联起来了,今天开始撸项目背八股,哪不会学哪了,单学效率太低了,争取能在春节后找到个实习,加油!!!

http://www.hkea.cn/news/69154/

相关文章:

  • wordpress站点描述seo哪个软件好
  • 澳门服务器做网站需要备案吗百度ai人工智能平台
  • 做化验的在哪个网站里投简历河南网站关键词优化
  • 百度网址大全网站大全网络整合营销方案ppt
  • 海阳市建设工程交易中心网站品牌推广的作用
  • 江西省住房和城乡建设网站成都网站优化seo
  • java资源网站云优化
  • 小程序源码大全网络seo关键词优化技巧
  • 服务佳的小企业网站建设ip子域名大全
  • 网页与制作唐山seo推广公司
  • 自己做的网站怎么弄到网上在线网页制作
  • 电商网站 设计方案百度的排名规则详解
  • 福建省建设厅网站余外链链接平台
  • 广告营销网站市场推广方案
  • 徐州企业做网站软文是什么文章
  • 网站代码备份如何优化seo
  • 百度网站公司信息推广怎么做天津做网站的网络公司
  • wordpress在线pdfseo百度站长工具查询
  • 太仓网站建设有限公司网站设计公司怎么样
  • 网站去哪做在线crm软件
  • 做360手机网站快速汕头seo排名收费
  • 网站建设总做总结宜兴百度推广公司
  • 做毕业网站的周记外贸建站优化
  • 南昌市住房和城乡建设局网站百度官网推广平台电话
  • 真人做视频网站百度怎么发布广告
  • 网站页面优化包括怎么给网站做优化
  • 哪个网站用帝国cms做的软文素材网
  • 网站建设需要的资料深圳精准网络营销推广
  • 客户网站建设公司网站排名提升软件
  • 网站建设与维护试卷论文怎么在百度上做广告