OpenJudge_ 简单英文题_04:0/1 Knapsack
题目
描述
Given the weights and values of N items, put a subset of items into a knapsack of capacity C to get the maximum total value in the knapsack. The total weight of items in the knapsack does not exceed C.
输入
First line: two positive integers N (N <= 100) and C (C <= 1000).
Second line: N positive integers w[i] (w[i] <= 1000), indicating the weight of the i-th item.
Third line: N positive integers v[i] (v[i] <= 1000), indicating the value of the i-th item.
输出
One line contains several integers, indicating the indexes of the selected items.
样例输入
5 10
2 4 6 2 5
1 3 4 2 8
样例输出
2
5
翻译
题目:
0/1背包
描述:
给定N个物品的权重和值,将一个子集的物品放入容量为C的背包中,以获得背包中的最大总值。背包中物品的总重量不超过C。
输入:
第一行:两个正整数N(N<=100)和C(C<=1000)。
第二行:N个正整数w[i](w[i]<=1000),表示第i个项目的权重。
第三行:N个正整数v[i](v[i]<=1000),表示第i项的值。
输出:
一行包含几个整数,表示所选项目的索引。
代码
#include <bits/stdc++.h>
using namespace std;
int n,//物品数量
c,//背包容量
w[1001],//每物品重量
v[1001],//每物品价值
f[101][1001];//多少重量时对应的最大价值
/*
f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i]);
f[几个物品][重量]=最大(f[不要该物品][同样重量],f[不要该物品][重量-该物品重量]+该物品价值);
没有该重量时的最大价值+该物品价值。
*/
struct node{
int i,j;
}p[101][1001]; //该物品的上个物品
void view(){//观察数据
cout<<“数据:\n”;
cout<<“重量\t\t”;for(int j=0;j<=c;j++)cout<<j<<“\t”;cout<<endl;
for(int i=1;i<=n;i++){
cout<<i<<“:\t”<<w[i]<<“,”<<v[i]<<“\t”;for(int j=0;j<=c;j++)cout<<f[i][j]<<“\t”;cout<<endl;
cout<<“\t\t”;for(int j=0;j<=c;j++)cout<<p[i][j].i<<“,”<<p[i][j].j<<“\t”;cout<<endl;
}
cout<<endl;
}
int main(){
//freopen(“data.cpp”,“r”,stdin);
cin>>n>>c;
//cout<<“物品数量”<<n<<“\t背包容量”<<c<<endl;
for(int i=1;i<=n;i++)cin>>w[i];
for(int i=1;i<=n;i++)cin>>v[i];
for(int i=1;i<=n;i++)//行,各物品
for(int j=0;j<=c;j++){//列,每重量
f[i][j]=f[i-1][j];//该重量时能取得的最大价值可以初步认定为不用该物品就取得的最大价值
p[i][j]=node{i-1,j};
if(j>=w[i])//如果重量超过该物品的重量,可以考虑用该物品
if(f[i][j]<f[i-1][j-w[i]]+v[i]){//不用该物品(i-1)不算该物品重量(j-w[i])时取得的最大价值上+该物品的价值
f[i][j]=f[i-1][j-w[i]]+v[i];
p[i][j]=node{i-1,j-w[i]};
}
}
//view();
stack s;
int pi=n,pj=c;
while(f[pi][pj]!=0){//只要有价值就算
node px=p[pi][pj];//找到前一状态
if(pj!=px.j)s.push(pi);//如果两状态的重量一样就不算。
pi=px.i,pj=px.j;
}
while(!s.empty()){//逆序输出采用的各物品
cout<<s.top()<<endl;s.pop();
}
return 0;
}
小结
动态规划就怕画表格,画完表格就清楚了。
初始状态是怎样,随着阶段的变化状态怎样变化。
然后就能找到动态转移方程。
相关文章:
OpenJudge_ 简单英文题_04:0/1 Knapsack
题目 描述 Given the weights and values of N items, put a subset of items into a knapsack of capacity C to get the maximum total value in the knapsack. The total weight of items in the knapsack does not exceed C. 输入 First line: two positive integers N (…...
深入探索离散 Hopfield 神经网络
一、离散 Hopfield 神经网络的起源与发展 离散 Hopfield 神经网络由约翰・霍普菲尔德在 1982 年提出,这一创新性的成果在当时引起了广泛关注,成为早期人工神经网络的重要代表之一。 在那个时期,人工神经网络的发展还处于相对初级的阶段。霍…...
[智能车摄像头是一种安装在汽车上用于辅助驾驶和提高安全性的重要设备]
智能车摄像头是一种安装在汽车上用于辅助驾驶和提高安全性的重要设备。它们通常包括几个不同类型,如前视摄像头、环视摄像头、行车记录仪等。这些摄像头的主要功能有: 前视摄像头(Forward Camera):用于提供驾驶员前方…...
前端vue 列表中回显并下拉选择修改标签
1,vue数据列表中进行回显状态并可以在下拉框中选择修改,效果如下 2,vue 页面关键代码 <el-table-column label"审核" align"center" class-name"small-padding fixed-width" prop"status" >&…...
hbase未来的发展趋势
HBase 作为一个开源的分布式、可伸缩的 NoSQL 数据库,依托于 Hadoop 生态系统,以处理海量结构化数据为优势。随着大数据技术的发展,HBase 的发展趋势主要体现在以下几个方面: 1. 与云计算深度集成 随着企业向云迁移,HBase 也正在越来越多地部署在云环境中。云服务商(如 …...
Rust 语言学习笔记(二)
再继续快速学习一下 Rust 的以下几个知识点,就可以开始着手做点小工具了 基本数据类型复合数据类型基本的流程控制 Rust 设计为有效使用内存考虑的,它提供了非常细力度的数据类型,如整数分为有无符号,宽度从 8 位到 128 位&…...
【postman】怎么通过curl看请求报什么错
获取现成的curl方式: 1,拿别人给的curl 2,手机app界面通过charles抓包,点击接口复制curl 3,浏览器界面-开发者工具-选中接口复制curl 拿到curl之后打开postman,点击import,粘贴curl点击send&am…...
Python 编程入门指南(一)
1. Python 简介 Python是一种广泛使用的高级编程语言,因其简洁的语法和强大的功能而备受欢迎。Python由Guido van Rossum于20世纪90年代初设计,旨在提供易于阅读和编写的代码,适合从初学者到专业开发者的各个水平。它是一种解释型语言,这意味着在编写和执行代码之间不需要…...
macOS 设置固定IP
文章目录 以太网Wifi 基于 macOS 15.1 以太网 Wifi...
redis实现消息队列的几种方式
一、了解 众所周知,redis是我们日常开发过程中使用最多的非关系型数据库,也是消息中间件。实际上除了常用的rabbitmq、rocketmq、kafka消息队列(大家自己下去研究吧~模式都是通用的),我们也能使用redis实现消息队列。…...
debian 系统更新升级
系统升级能够有效避免漏洞导致的损害 不过需要做好提前和后续的测试,避免现有运行程序的错误。 debian安装参考:链接 一、清理过时和不再使用的源 1.清理源 vi /etc/apt/sources.list2.在下面的文件夹下清理不需要的 cd /etc/apt/sources.list.d二、…...
STM32学习笔记-----UART的概念
在 STM32 中,UART(Universal Asynchronous Receiver/Transmitter)是一种常用的串行通信接口,广泛应用于嵌入式系统中。STM32 提供了丰富的硬件资源来支持 UART 通信,可以通过标准库(STM32 HAL 或者标准外设…...
Pytest-Bdd-Playwright 系列教程(9):datatable 参数的使用
Pytest-Bdd-Playwright 系列教程(9):datatable 参数的使用 前言一、什么是 datatable 参数?Gherkin 表格示例 二、datatable 参数的基本使用feature文件:获取用户信息并执行相关操作的使用 datatable 处理表格数据Give…...
【408】SDN重点笔记
总特征:数据平面(负责转发)与控制平面(负责控制)分离 控制平面: 由服务器和软件组成。控制平面完成转发表,并分发。 路由器不再需要路由选择协议,不再交换信息,只负责收到…...
云运维基础
笔记内容侵权联系删除 云审计(CTS) 云审计云上资源变更均可被管控,实时系统性记录所有人的操作,无需手工统计。云审计服务支持将操作记录合并,周期性地生成事件文件实时同步转存到OBS存储桶,帮助用户实现…...
基于微信小程序的平安驾校预约平台的设计与实现(源码+LW++远程调试+代码讲解等)
摘 要 互联网发展至今,广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力…...
Rust开发一个命令行工具(一,简单版持续更新)
依赖的包 cargo add clap --features derive clap命令行参数解析 项目目录 代码 main.rs mod utils;use clap::Parser; use utils::{editor::open_in_vscode,fs_tools::{file_exists, get_file, is_dir, list_dir, read_file}, }; /// 在文件中搜索模式并显示包含它的行。…...
实战:深入探讨 MySQL 和 SQL Server 全文索引的使用及其弊端
在数据库中处理大量文本数据时,包含搜索(例如查找包含特定单词的文本)往往是必需的。然而,直接使用 LIKE %text% 的方式在大数据量中进行模糊查询会造成性能瓶颈。为了解决这一问题,MySQL 和 SQL Server 提供了全文索引(Full-Text Indexing)功能,可以显著加速文本数据的…...
情景2 虚拟化世界 自己答案的理解
1、什么是虚拟化? 答:版本很多,选了两个作为参考。 定义1:虚拟化是创造设备或者资源的虚拟版本,如服务器、存储设备、网络或者操作系统。 定义2:虚拟化是资源的逻辑表示,它不受物理限制的约束。 2、寄生…...
【国产操作系统对Qt支持有哪些?】
国产操作系统 鸿蒙操作系统:由华为开发,主要用于智能设备和物联网领域。 深度操作系统:基于Linux的操作系统,适用于个人电脑和服务器。 中标麒麟:由中国电子科技集团公司研发,适用于服务器和桌面环境。 悠然操作系统:面向教育和个人用户的Linux发行版。 红旗Linux:早期…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
