网站怎么吸引流量/网络营销推广方法

网站怎么吸引流量,网络营销推广方法,中企动力做网站多少钱,著名办公空间设计这段代码实现了一个多重背包问题的动态规划解法,并且使用了二进制拆分(或称二进制优化)来优化物品的数量处理。这种方法可以显著减少状态转移的次数,提高算法的效率。以下是代码的详细思路解析: 1. 问题背景 给定 n 个…

这段代码实现了一个多重背包问题的动态规划解法,并且使用了二进制拆分(或称二进制优化)来优化物品的数量处理。这种方法可以显著减少状态转移的次数,提高算法的效率。以下是代码的详细思路解析:


1. 问题背景

给定 n 个物品,每个物品有其体积 a、价值 b 和数量 s,以及一个容量为 m 的背包。目标是选择物品使得总价值最大,同时总容量不超过背包的容量。与完全背包问题不同的是,多重背包问题中每个物品的数量是有限的。

2. 二进制拆分的概念

二进制拆分是一种优化技巧,用于处理多重背包问题中的物品数量。通过将每个物品的数量 s 拆分成若干个部分,每个部分的数量为 2^kk 从 0 开始),可以显著减少状态转移的次数。例如,如果 s = 13,可以拆分成 1 + 2 + 4 + 6,其中 1 + 2 + 4 = 7,剩余的 6 作为最后一部分。

3. 代码逻辑解析

(1) 输入数据
cin >> n >> m;
int cnt = 0;
for (int i = 1; i <= n; i++)
{int a, b, s;cin >> a >> b >> s;int k = 1;while (k <= s){cnt++;v[cnt] = a * k;w[cnt] = b * k;s -= k;k *= 2;}if (s > 0){cnt++;v[cnt] = a * s;w[cnt] = b * s;}
}
n = cnt;
  • 用户输入物品数量 n 和背包容量 m

  • 对于每个物品,输入其体积 a、价值 b 和数量 s

  • 使用二进制拆分将每个物品的数量 s 拆分成若干个部分,每个部分的数量为 2^k

  • 将每个部分作为一个新的物品,存储到数组 vw 中。

  • 更新物品总数 n 为拆分后的物品数量 cnt

(2) 动态规划状态转移
for (int i = 1; i <= n; i++)for (int j = m; j >= v[i]; j--)f[j] = max(f[j], f[j - v[i]] + w[i]);
  1. 外层循环

    • 遍历每个物品,从第 1 个到第 n 个。

  2. 内层循环

    • 遍历背包的每个容量,从 mv[i](逆序遍历)。

    • 逆序遍历的原因是避免重复使用同一个物品。如果正序遍历,同一个物品可能会被多次使用,从而变成完全背包问题。

  3. 状态转移

    • f[j] 表示在容量为 j 的背包下的最大价值。

    • 不选择第 i 个物品f[j] 保持不变。

    • 选择第 i 个物品:如果当前容量 j 大于等于第 i 个物品的体积 v[i],则可以考虑选择第 i 个物品,更新 f[j]f[j - v[i]] + w[i],即在容量为 j - v[i] 的背包下的最大价值加上第 i 个物品的价值。

(3) 输出结果
cout << f[m] << endl;
  • 输出最终的最大价值,即 f[m]

4. 代码效率分析

  • 时间复杂度

    • 二进制拆分将每个物品的数量 s 拆分成若干个部分,每个部分的数量为 2^k,因此每个物品最多被拆分成 O(log s) 个部分。

    • 动态规划的状态转移时间复杂度为 O(n × m),其中 n 是拆分后的物品数量。

    • 总时间复杂度为 O(n × m × log s)

  • 空间复杂度

    • 使用了一个一维数组 f,空间复杂度为 O(m)

5. 示例运行

输入:
4 5
1 2 3
2 4 1
3 4 3
4 5 2
输出:
10

6. 总结

这段代码的核心思路是通过动态规划解决多重背包问题,并使用二进制拆分优化物品的数量处理。通过维护一个一维数组 f,记录不同状态下的最大价值,并通过状态转移方程更新最大价值,最终找到在给定背包容量下的最大价值。这种方法的时间复杂度为 O(n × m × log s),空间复杂度为 O(m),适用于中等规模的多重背包问题。

完整代码

#include<bits/stdc++.h>
using namespace std;// 定义常量 N 和 M,N 用于数组大小,M 这里未使用
const int N = 25000, M = 2010;
// n 表示物品的种类数,m 表示背包的容量
int n, m;
// v 数组存储物品的体积,w 数组存储物品的价值
int v[N], w[N];
// f 数组是一维数组,f[j] 表示背包容量为 j 时能获得的最大价值
int f[N];int main()
{// 输入物品的种类数 n 和背包的容量 mcin >> n >> m;// cnt 用于记录经过二进制优化后物品的数量int cnt = 0;// 循环处理每种物品for(int i = 1; i <= n; i ++){// 输入当前物品的体积 a、价值 b 和数量上限 sint a, b, s;cin >> a >> b >> s;// k 用于二进制拆分,初始为 1int k = 1;// 进行二进制拆分while(k <= s){// 物品数量加 1cnt ++;// 计算拆分后物品的体积v[cnt] = a * k;// 计算拆分后物品的价值w[cnt] = b * k;// 减去已拆分的数量s -= k;// k 乘以 2,继续下一次拆分k *= 2;}// 如果还有剩余数量,将剩余部分作为一个新物品if(s > 0){cnt ++;v[cnt] = a * s;w[cnt] = b * s;}}// 更新物品的种类数为拆分后的数量n = cnt;// 使用 0 - 1 背包的方法进行动态规划for(int i = 1; i <= n; i ++)// 内层循环从背包的最大容量 m 开始,递减到当前物品的体积 v[i]for(int j = m; j >= v[i]; j --)// 比较不选择第 i 个物品和选择第 i 个物品两种情况下的最大价值f[j] = max(f[j], f[j - v[i]] + w[i]);// 输出背包容量为 m 时能获得的最大价值cout << f[m] << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FALL靶机攻略

1.下载靶机&#xff0c;导入靶机 下载地址&#xff1a;https://download.vulnhub.com/digitalworld/FALL.7z 开启靶机。 2. 靶机、kali设置NAT网卡模式 3. kali扫描NAT网卡段的主机 kali主机 nmap扫描&#xff1a;nmap 192.168.92.1/24 判断出靶机ip是192.168.92.133。开启…

notepad++代码查看器分享

文章目录 &#x1f4dd; Notepad 简介&#x1f527; 主要特点打开.c文件示意高亮语法展示全局替换功能展示 &#x1f4dd; Notepad 简介 Notepad 是一款 免费的开源文本编辑器和源代码编辑器&#xff0c;运行在 Windows 系统上。 它是对 Windows 自带“记事本”的增强版本&…

MySQL中的内连接与外连接详解:基础与进阶应用

文章目录 表的内连和外连&#xff08;重点&#xff09;内连接外连接左外连接右外连接 简单回顾 表的内连和外连&#xff08;重点&#xff09; 表的连接分为内连和外连 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选&#xff0c;我们前面学习的查询都…

Milvus×最新版DeepSeek v3:对标Claude,本地数据五分钟写网站

前言 就在昨晚&#xff0c;DeepSeek v3推出了新版本V3-0324&#xff0c;再次一夜爆火。 虽然官方表示“这只是一次小升级”“API接口和使用方式不变”&#xff0c;但经过Zilliz的第一时间实测&#xff0c;我们发现无论是逻辑能力&#xff0c;还是编程能力&#xff0c;相较原本的…

6.M-LAG专题

M-LAG 的作用及特点 能不能简单的描述以下M-LAG的工作原理? 跨设备链路聚合&#xff0c;将两台物理设备在聚合层面虚拟成一台设备来实现跨设备链路聚合&#xff0c;从而提供设备级冗余保护和流量负载分担 M-LAG(跨设备链路聚合)是基于IEEEP802.1A协议的跨设备链路聚合技术。…

每日免费分享之精品wordpress主题系列~DAY16

主题介绍&#xff1a; 今日在网上寻找wordpress主题的时候逛到了大叔的网站&#xff0c;赶脚这个主题蛮不错的&#xff0c;于是百度一下&#xff0c;果然&#xff0c;这个主题很受欢迎。作为主题下载站追梦者也不甘落后&#xff0c;马上就发布出来了&#xff0c;希望对你们有用…

LeeCode 383. 赎金信

给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1&#xff1a; 输入&#…

目标检测20年(一)

今天看的文献是《Object Detection in 20 Years: A Survey》&#xff0c;非常经典的一篇目标检测文献&#xff0c;希望通过这篇文章学习到目标检测的基础方法并提供一些创新思想。 论文链接&#xff1a;1905.05055 目录 一、摘要 1.1 原文 1.2 翻译 二、介绍 三、目标检测…

IDEA 快捷键ctrl+shift+f 无法全局搜索内容的问题及解决办法

本篇文章主要讲解IDEA、phpStrom、webStrom、pyCharm等jetbrains系列编辑器无法进行全局搜索内容问题的主要原因及解决办法。 日期&#xff1a;2025年3月22日 作者&#xff1a;任聪聪 现象描述&#xff1a; 1.按下ctrlshiftf 输入法转为了繁体。 2.快捷键ctrlshiftr 可以全局检…

树状数组【数据结构】

树状数组 简介 1.应用 1.单点修改区间查询 2.区间修改单点查询(差分) 3.区间修改区间查询(差分公式) 总而言之,就是动态维护前缀和。 2.树状结构图 3.lowbit函数 我们知道&#xff0c;任何一个正整数都可以被表示成一个二进制数。如&#xff1a; ( 2 ) 10 ( 10 ) 2 (2)_{10…

pytorch+maskRcnn框架训练自己的模型以及模型导出ONXX格式供C++部署推理

背景 maskrcnn用作实例分割时&#xff0c;可以较为精准的定位目标物体&#xff0c;相较于yolo只能定位物体的矩形框而言&#xff0c;优势更大。虽然yolo的计算速度更快。 直接开始从0到1使用maskrCNN训练自己的模型并并导出给C部署&#xff08;亲测可用&#xff09; 数据标注…

PCL配置

1、下载 打开GitHub网站&#xff0c;搜索pcl&#xff0c;选择第一个结果打开&#xff0c;按照下图步骤操作 下载PCL预编译安装程序PCL-1.13.1-AllInOne-msvc2022-win64.exe 和要安装的PCL组件&#xff08;例如pcl-1.13.1-pdb-msvc2022-win64.zip&#xff09; 2、安装 双击 P…

VectorBT:使用PyTorch+LSTM训练和回测股票模型 进阶一

VectorBT&#xff1a;使用PyTorchLSTM训练和回测股票模型 进阶一 本文介绍了如何使用PyTorch和LSTM模型进行股票数据的训练和回测。涵盖了数据预处理、特征选择、LSTM模型构建、模型训练与验证、动态阈值策略生成交易信号以及使用VectorBT进行回测和绩效分析。 文中内容仅限技术…

MantisBT在Windows10上安装部署详细步骤

MantisBT 是一款基于 Web 的开源缺陷跟踪系统&#xff0c;以下是在 Windows 10 上安装部署 MantisBT 的详细步骤&#xff1a; 1. 安装必要的环境 MantisBT 是一个基于 PHP 的 Web 应用程序&#xff0c;因此需要安装 Web 服务器&#xff08;如 Apache&#xff09;、PHP 和数据…

深入理解K8s与Docker的关系:容器化技术的双雄

友情提示&#xff1a;本文内容由银河易创&#xff08;https://ai.eaigx.com&#xff09;AI创作平台gpt-4-turbo模型生成&#xff0c;仅供参考。 在现代云计算及微服务架构的发展中&#xff0c;Docker与Kubernetes&#xff08;K8s&#xff09;作为两大核心技术&#xff0c;被广泛…

蓝桥与力扣刷题(蓝桥 蓝桥骑士)

题目&#xff1a;小明是蓝桥王国的骑士&#xff0c;他喜欢不断突破自我。 这天蓝桥国王给他安排了 N 个对手&#xff0c;他们的战力值分别为 a1,a2,...,an&#xff0c;且按顺序阻挡在小明的前方。对于这些对手小明可以选择挑战&#xff0c;也可以选择避战。 身为高傲的骑士&a…

如何查看window电脑的GPU信息

GPU&#xff08;图形处理器&#xff0c;Graphics Processing Unit&#xff09;和显卡是两个密切相关但不同的概念 概念 1. ‌基本概念‌ ‌GPU‌&#xff1a;是专门用于处理图像和视频信息的微处理器&#xff0c;拥有强大的并行计算能力&#xff0c;主要负责图形渲染、数值分…

26考研——查找_树形查找_二叉排序树(BST)(7)

408答疑 文章目录 三、树形查找二叉排序树&#xff08;BST&#xff09;二叉排序树中结点值之间的关系二叉树形查找二叉排序树的查找过程示例 向二叉排序树中插入结点插入过程示例 构造二叉排序树的过程构造示例 二叉排序树中删除结点的操作情况一&#xff1a;被删除结点是叶结点…

如何在 Postman 中导入和导出 cURL 命令?

cURL 是一款广受欢迎的命令行工具&#xff0c;专门用于执行 HTTP 请求。它在 Web 应用或 API 测试中极为实用&#xff0c;让用户得以借助在 API 开发者社区广为流行的成熟语法&#xff0c;直接通过命令行与 API 进行交互。若你需要在多个环境下运行众多 cURL 命令&#xff0c;可…

用python制作一个贪吃蛇小游戏

文章目录 效果图python源码使用说明效果图 只需要一百多行python代码,就能制作一个贪吃蛇小游戏。效果如下: 操作说明: 你可以使用上下左右箭头键来控制蛇的移动方向。蛇吃到食物后会变长,当蛇撞到墙壁或自己的身体时游戏结束。游戏结束后,你可以按 Q 退出游戏,或按 C…