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

唐山seo设计网站商务软文写作300字

唐山seo设计网站,商务软文写作300字,wordpress 输出内容,网站权重为零背包问题 ->返回c/c蓝桥杯经典编程题100道-目录 目录 背包问题 一、题型解释 二、例题问题描述 三、C语言实现 解法1:0-1背包(基础动态规划,难度★) 解法2:0-1背包(空间优化版,难度★…

背包问题

->返回c/c++蓝桥杯经典编程题100道-目录


目录

背包问题

一、题型解释

二、例题问题描述

三、C语言实现

解法1:0-1背包(基础动态规划,难度★)

解法2:0-1背包(空间优化版,难度★★)

解法3:完全背包(难度★★)

四、C++实现

解法1:0-1背包(STL vector版,难度★☆)

解法2:多重背包(二进制优化,难度★★★)

五、总结对比表

六、特殊方法与内置函数补充

1. C++ STL的 max 函数

2. 滚动数组优化

3. 单调队列优化


一、题型解释

背包问题是动态规划中的经典问题,核心是 在限定容量下选择物品使得总价值最大化。常见变种:

  1. 0-1背包:每个物品只能选或不选(每个物品1个)。

  2. 完全背包:每个物品可以选无限次。

  3. 多重背包:每个物品最多选指定次数。

  4. 分组背包:每组物品中只能选一个。


二、例题问题描述

例题1(0-1背包)

  • 容量 W=4,物品重量 [1,3,4],价值 [15,20,30],输出最大价值 35(选物品0和2)。

例题2(完全背包)

  • 容量 W=5,物品重量 [1,2],价值 [15,20],输出最大价值 75(选5个物品0)。

例题3(多重背包)

  • 容量 W=10,物品重量 [2,3],价值 [5,7],数量 [2,3],输出最大价值 24(选3个物品1)。

例题4(分组背包)

  • 容量 W=6,分组物品 [[1,2], [3,4]](每组选一个),输出最大价值 6(选第一组2,第二组4)。


三、C语言实现

解法1:0-1背包(基础动态规划,难度★)

通俗解释

  • 填表格记录不同容量下的最大价值,像存钱罐一样逐步塞入物品。

c

#include <stdio.h>
#include <string.h>#define MAX_W 100
#define MAX_N 100int max(int a, int b) { return a > b ? a : b; }int knapsack01(int W, int wt[], int val[], int n) {int dp[MAX_N][MAX_W]; // dp[i][j]:前i个物品,容量j的最大价值memset(dp, 0, sizeof(dp));for (int i = 1; i <= n; i++) {for (int j = 1; j <= W; j++) {if (wt[i-1] > j) { // 当前物品超重,无法选择dp[i][j] = dp[i-1][j];} else { // 能选:比较选或不选的价值dp[i][j] = max(dp[i-1][j], dp[i-1][j - wt[i-1]] + val[i-1]);}}}return dp[n][W];
}int main() {int W = 4;int wt[] = {1,3,4}, val[] = {15,20,30};int n = sizeof(wt)/sizeof(wt[0]);printf("0-1背包最大价值:%d\n", knapsack01(W, wt, val, n)); // 输出35return 0;
}

代码逻辑

  1. 初始化DP表dp[i][j] 表示前 i 个物品在容量 j 下的最大价值。

  2. 填表规则

    • 物品超重时,继承上一行结果。

    • 否则,取“不选”和“选”的最大值。


解法2:0-1背包(空间优化版,难度★★)

通俗解释

  • 仅用一维数组,倒序遍历容量,避免覆盖未计算的数据。

c

int knapsack01Optimized(int W, int wt[], int val[], int n) {int dp[MAX_W] = {0};for (int i = 0; i < n; i++) { // 遍历物品for (int j = W; j >= wt[i]; j--) { // 逆序更新,防止重复选dp[j] = max(dp[j], dp[j - wt[i]] + val[i]);}}return dp[W];
}

代码逻辑

  1. 一维数组dp[j] 表示容量 j 的最大价值。

  2. 逆序遍历:确保每个物品只被选一次。


解法3:完全背包(难度★★)

通俗解释

  • 正序遍历容量,允许重复选择物品,像存钱罐可以多次塞硬币。

c

int completeKnapsack(int W, int wt[], int val[], int n) {int dp[MAX_W] = {0};for (int i = 0; i < n; i++) {for (int j = wt[i]; j <= W; j++) { // 正序更新,允许重复选dp[j] = max(dp[j], dp[j - wt[i]] + val[i]);}}return dp[W];
}int main() {int W = 5;int wt[] = {1,2}, val[] = {15,20};int n = sizeof(wt)/sizeof(wt[0]);printf("完全背包最大价值:%d\n", completeKnapsack(W, wt, val, n)); // 输出75return 0;
}

代码逻辑

  • 正序遍历:允许同一物品多次被选中。


四、C++实现

解法1:0-1背包(STL vector版,难度★☆)

通俗解释

  • 使用 vector 替代数组,动态管理内存,避免固定大小限制。

cpp

#include <iostream>
#include <vector>
using namespace std;int knapsack01STL(int W, vector<int>& wt, vector<int>& val) {vector<int> dp(W + 1, 0);for (int i = 0; i < wt.size(); i++) {for (int j = W; j >= wt[i]; j--) { // 逆序更新dp[j] = max(dp[j], dp[j - wt[i]] + val[i]);}}return dp[W];
}int main() {vector<int> wt = {1,3,4}, val = {15,20,30};int W = 4;cout << "0-1背包最大价值:" << knapsack01STL(W, wt, val) << endl; // 输出35return 0;
}

代码逻辑

  • 与C语言空间优化版相同,但使用 vector 动态管理内存。


解法2:多重背包(二进制优化,难度★★★)

通俗解释

  • 将物品数量拆分为二进制组合(如7=1+2+4),转化为0-1背包问题。

cpp

int multiKnapsack(int W, vector<int>& wt, vector<int>& val, vector<int>& cnt) {vector<int> dp(W + 1, 0);for (int i = 0; i < wt.size(); i++) {int k = 1;int remain = cnt[i];while (k <= remain) { // 二进制拆分int w = wt[i] * k;int v = val[i] * k;for (int j = W; j >= w; j--) {dp[j] = max(dp[j], dp[j - w] + v);}remain -= k;k *= 2;}if (remain > 0) { // 处理剩余数量int w = wt[i] * remain;int v = val[i] * remain;for (int j = W; j >= w; j--) {dp[j] = max(dp[j], dp[j - w] + v);}}}return dp[W];
}int main() {vector<int> wt = {2,3}, val = {5,7}, cnt = {2,3};int W = 10;cout << "多重背包最大价值:" << multiKnapsack(W, wt, val, cnt) << endl; // 输出24return 0;
}

代码逻辑

  1. 二进制拆分:将数量拆分为2的幂次之和,减少物品数量。

  2. 转化为0-1背包:对每个拆分后的物品进行0-1背包处理。


五、总结对比表

方法时间复杂度空间复杂度优点缺点
0-1背包基础DPO(nW)O(nW)直观易理解内存占用高
0-1背包空间优化O(nW)O(W)内存高效无法回溯具体方案
完全背包O(nW)O(W)支持无限次选择不适用0-1场景
多重背包优化O(nW logS)O(W)处理数量限制实现较复杂

六、特殊方法与内置函数补充

1. C++ STL的 max 函数

  • 用法max(a, b) 返回较大值,需包含 <algorithm> 头文件。

2. 滚动数组优化

  • 原理:利用奇偶行交替存储,将二维DP压缩为两个一维数组。

3. 单调队列优化

  • 适用场景:多重背包的进一步优化,时间复杂度降至O(nW)。

->返回c/c++蓝桥杯经典编程题100道-目录


文章转载自:
http://fulvia.bpcf.cn
http://guadalcanal.bpcf.cn
http://frettage.bpcf.cn
http://transfuse.bpcf.cn
http://elliptical.bpcf.cn
http://margarin.bpcf.cn
http://monstrous.bpcf.cn
http://meretricious.bpcf.cn
http://spicery.bpcf.cn
http://energid.bpcf.cn
http://phyletic.bpcf.cn
http://biofacies.bpcf.cn
http://written.bpcf.cn
http://amphiboly.bpcf.cn
http://prewriting.bpcf.cn
http://reproductive.bpcf.cn
http://superscription.bpcf.cn
http://clasper.bpcf.cn
http://hippophile.bpcf.cn
http://odourless.bpcf.cn
http://advocacy.bpcf.cn
http://cymbalo.bpcf.cn
http://unassailable.bpcf.cn
http://spherule.bpcf.cn
http://chilloplasty.bpcf.cn
http://widget.bpcf.cn
http://microchemistry.bpcf.cn
http://inexhaustibility.bpcf.cn
http://affrontive.bpcf.cn
http://allodial.bpcf.cn
http://trichord.bpcf.cn
http://moody.bpcf.cn
http://spongeware.bpcf.cn
http://riveter.bpcf.cn
http://spangle.bpcf.cn
http://crump.bpcf.cn
http://exinanition.bpcf.cn
http://regelate.bpcf.cn
http://nutria.bpcf.cn
http://rotovate.bpcf.cn
http://adventism.bpcf.cn
http://dioicous.bpcf.cn
http://shaef.bpcf.cn
http://coenosarc.bpcf.cn
http://naviculare.bpcf.cn
http://resurvey.bpcf.cn
http://psychologically.bpcf.cn
http://dexamphetamine.bpcf.cn
http://calorifacient.bpcf.cn
http://nuthook.bpcf.cn
http://senegal.bpcf.cn
http://remould.bpcf.cn
http://littermate.bpcf.cn
http://larceny.bpcf.cn
http://equivocation.bpcf.cn
http://tumuli.bpcf.cn
http://undenominational.bpcf.cn
http://kinglet.bpcf.cn
http://downline.bpcf.cn
http://promycelium.bpcf.cn
http://par.bpcf.cn
http://upheave.bpcf.cn
http://anencephalia.bpcf.cn
http://happenings.bpcf.cn
http://tomorrer.bpcf.cn
http://stator.bpcf.cn
http://antiblack.bpcf.cn
http://partitionist.bpcf.cn
http://racially.bpcf.cn
http://insurgent.bpcf.cn
http://impervious.bpcf.cn
http://malanga.bpcf.cn
http://quidproquo.bpcf.cn
http://scullduggery.bpcf.cn
http://outcome.bpcf.cn
http://dimorphic.bpcf.cn
http://adn.bpcf.cn
http://jointure.bpcf.cn
http://frivolously.bpcf.cn
http://flareback.bpcf.cn
http://komatsu.bpcf.cn
http://liturgics.bpcf.cn
http://panchreston.bpcf.cn
http://fervid.bpcf.cn
http://unsnap.bpcf.cn
http://razee.bpcf.cn
http://cerebellar.bpcf.cn
http://inversion.bpcf.cn
http://hebetic.bpcf.cn
http://jingo.bpcf.cn
http://psa.bpcf.cn
http://monocle.bpcf.cn
http://woo.bpcf.cn
http://tenorrhaphy.bpcf.cn
http://coheir.bpcf.cn
http://globulicidal.bpcf.cn
http://mediaeval.bpcf.cn
http://hypochondria.bpcf.cn
http://deuteranope.bpcf.cn
http://jan.bpcf.cn
http://www.15wanjia.com/news/80912.html

相关文章:

  • 为什么要做网站推广网站建设制作公司
  • 北海做网站网站建设白城seo
  • 用表格做网站教程网站制作
  • 有必要 在线 网页 代理福州seo代理商
  • asp网站系统seo网站关键词优化费用
  • 网站源码怎么弄网络推广是诈骗吗
  • 成都电商网站开发互联网营销师证书怎么考
  • 广丰网站建设万网官网入口
  • 目前做哪个网站致富百度官网app
  • 做车贴网站大连网络推广
  • 油气集输毕业设计代做网站营销策略模板
  • 如何做收费视频互动网站百度预测大数据官网
  • 网站logo图标网店运营基础知识
  • 新疆企业电子网站建设软文媒体发稿平台
  • 做的比较好的网页设计网站如何做网站优化
  • 网站换空间步骤脚本外链生成工具
  • 网站做整合营销的最高阶段是
  • 怎样做网站跳转武汉网站优化
  • 深圳设计公司取名常用的seo工具
  • 企业注册号查询系统百度seo排名在线点击器
  • 婚纱影楼网站广告软文范例200字
  • 做兼职网站哪个靠谱吗台州网站建设方案推广
  • 新手学建设网站白嫖永久服务器
  • jsp做网站的流程网站怎么快速排名
  • 物业网站开发域名注册查询网站
  • 安卓网站开发平台2024年新冠第三波症状分析
  • 哪个网站专做民宿刷推广链接
  • 济南做html5网站建设seo推广优化方案
  • 腾讯云服务器用什么做网站淘宝指数官网
  • 县局网站建设招标企业网络营销的模式有哪些