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

18705 01背包问题

### 分析
这是一个典型的0/1背包问题。我们需要在有限的背包容量下,选择若干物品,使得获得的总价值最大。可以使用动态规划来解决这个问题。

### 伪代码
1. 定义一个一维数组`dp`,其中`dp[j]`表示容量为`j`的背包能获得的最大价值。
2. 初始化`dp[0]`为0,表示容量为0时价值为0。
3. 遍历每一个物品,对于每一个物品,遍历背包容量,从高到低更新`dp`数组。
4. 如果当前物品的重量小于等于当前背包容量,则更新`dp`数组。
5. 最后,`dp[M]`即为背包容量为M时能获得的最大价值。

### 代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int knapsack(int M, int N, vector<int>& W, vector<int>& C) {vector<int> dp(M + 1, 0);for (int i = 0; i < N; ++i) {for (int j = M; j >= W[i]; --j) {dp[j] = max(dp[j], dp[j - W[i]] + C[i]);}}return dp[M];
}int main() {int M, N;cin >> M >> N;vector<int> W(N), C(N);for (int i = 0; i < N; ++i) {cin >> W[i] >> C[i];}cout << knapsack(M, N, W, C) << endl;return 0;
}


 


http://www.mrgr.cn/news/2176.html

相关文章:

  • 注意!2024年下半年软考报名已开始
  • 机器学习之 K 近邻算法图像识别实战
  • CUDA-MODE课程笔记 第7课: Quantization Cuda vs Triton
  • 嵌入式软件--PCB DAY 1
  • python爬虫爬取某图书网页实例
  • ollama使用llama3.1案例
  • 鸿蒙(API 12 Beta3版)【DRM会话管理(ArkTS)】数字版权保护
  • C#全国增值税发票真伪查验-发票验真API-票据ocr
  • 双亲委派机制的优势与劣势
  • 入门 - vue中v-model的实现原理和完整用法详解
  • 4-1-3 arduino驱动直流电机(电机专项教程)
  • Linux之进程间通信(下)
  • 每日一问:深入理解JVM——结构与类的加载过程解析
  • 面了一个测试工程师要求月薪26K,总感觉他背了很多面试题...
  • 【Python】 Scrapy 爬虫:如何设置深度优先与广度优先采集策略
  • Git提交时emoji的使用
  • OSI七层网络模型 /TCP/IP五层模型以及封装分用的详细讲解
  • 如何使用DEV-C++做游戏?
  • 一文入门:正则表达式基础
  • 【学习笔记】卫星网络(NTN)的窄带物联网(NB-IoT)研究 -- 3GPP TR 36.763(二)