题解:AT_abc032_d [ABC032D] ナップサック問題

news/2024/12/15 21:16:45/文章来源:https://www.cnblogs.com/panda-lyl/p/18608746

思路

subtask1

直接暴力搜索即可。

subtask2

普通的 01 背包,直接 \(dp\) 即可。

subtask3

改变 \(dp\) 的状态,设 \(dp_i\) 表示价值为 \(i\) 时用的最小体积,那么就直接在里面找最小值就行。

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>using namespace std;typedef long long ll;
const int N = 200005;
ll n, W, v[N], w[N];
bool A = 1, B = 1;
ll dp[N];
ll ans;void dfs(int x, ll sp, ll sum) {if (x > n) {ans = max(ans, sum);return ;}if (w[x] <= sp) dfs(x + 1, sp - w[x], sum + v[x]);dfs(x + 1, sp, sum);
}int main() {scanf("%lld%lld", &n, &W);for (int i = 1; i <= n; i++) {scanf("%lld%lld", &v[i], &w[i]);if (w[i] > 1000) A = 0;if (v[i] > 1000) B = 0;}	if (!A && !B) {dfs(1, W, 0);printf("%lld\n", ans);}else if (A) {for (int i = 1; i <= n; i++) {for (int j = W; j >= w[i]; j--) dp[j] = max(dp[j], dp[j - w[i]] + v[i]);}for (int i = 1; i <= W; i++)ans = max(ans, dp[i]);printf("%lld\n", ans);}else {memset(dp, 0x3f, sizeof(dp));dp[0] = 0;long long sumv = 0;for (int i = 1; i <= n; i++)sumv += v[i];for (int i = 1; i <= n; i++) {for (int j = 200000; j >= v[i]; j--) {dp[j] = min(dp[j], dp[j - v[i]] + w[i]);}}for (int i = 1; i <= 200000; i++)if (dp[i] <= W)ans = i;printf("%lld\n", ans);}return 0;
}

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

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

相关文章

文件保护

文件保护 ‍ ​​ ‍一、口令保护 口令一般存放在文件对应的 FCB 或索引结点中。用户访问文件前需要先输入“口令”,操作系统会将用户提供的口令与 FCB 中存储的口令进行对比,如果正确,则允许该用户访问文件。优点:保存口令的空间开销不多,验证口令的时间开销也很小 缺点:…

文件系统的全局结构(布局)

文件系统的全局结构(布局) 一、文件系统在外存中的结构 演变过程:原始磁盘(刚被生产出来)​​物理格式化(低级格式化):划分扇区,检测坏扇区,并用备用扇区替换坏扇区(骗过OS)​​磁盘分区(分卷Volume)分为C盘、D盘等逻辑格式化完成各分区的文件系统初始化 注:逻辑…

虚拟文件系统文件系统挂载(安装)

虚拟文件系统&文件系统挂载(安装) 一、虚拟文件系统 (一)普通的文件系统 先来看不存在虚拟文件系统的普通文件系统,彼此之间实现同一功能的接口具有差异,比较混乱。 ​​ ‍ (二)VFS 虚拟文件系统 Virtual File System 为解决同时使用不同文件系统需要频繁改动底层…

文件的物理结构(文件分配方式)

文件的物理结构(文件分配方式) ‍ ​​ ‍类似于内存分页,磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。很多操作系统中,磁盘块的大小与内存块、页面的大小相同。 内存与磁盘之间的数据交换(即读/写操作、磁盘 I/O )都是以“块"为单位进行的。即每次读入…

【Adobe Animate 2024下载与安装教程】

1、安装包 我用夸克网盘分享了「Animate 2024」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。 链接:下载地址2、安装教程(建议关闭杀毒软件和系统防护) 1) 下载并解压下载的安装包,右击装载2) 双击Setup.exe安装…

jsp前端页面识别不了后端传过来的model-${user.id}

调试: controller 成功接收到参数。并且给model传入数据。界面也跳转了 jsp文件中使用 ${user.id} 获取数据 但是处理的依然是 ${user.id} 而不是传入来的数据。 原因: 默认创建的web,其配置文件 web.xml文件是使用 2.3版本 <!DOCTYPE web-app PUBLIC"-//Sun Micros…

基于ESP32的桌面小屏幕实战[4]:硬件设计之PCB Layout

1. PCB Layout 步骤生成PCB确定PCB layout规范绘制板框尺寸布局 布局规范:按电气性能合理分区,一般分为:数字电路区(即怕干扰、又产生干扰)、模拟电路区(怕干扰)、功率驱动区(干扰源); 完成同一功能的电路,应尽量靠近放置,并调整各元器件以保证连线最为简洁; 对于质…

【C#脚本】C#调用Python脚本的方式(一),以PaddleOCR-GUI为例

以下文章来源于mingupup的学习记录 ,作者DotNet学习交流 前言 每种语言都有每种语言的优势,Python由于其强大的生态,很多任务通过调用包就可以实现,那么学会从C#项目中调用Python脚本完成任务就很重要。C#调用Python代码有多种方式,如果Python那边内容比较多,可以考虑起一…

Derby 数据库介绍(1)--简介

Apache Derby 是 Apache DB 的一个子项目,是一个完全用 Java 实现的开源关系数据库,采用 Apache License 2.0 许可;本文主要介绍其基本概念及安装。 1、Derby 特点 Derby 体积小——基础引擎和嵌入式 JDBC 驱动程序约 3.5MB。Derby 基于 Java、JDBC 和 SQL 标准。Derby 提供…

参数占位符 #{xx} 和 ${xx} 的区别

#{xx} :带有#{}的SQL会采用SQL预编译技术,预编译后的SQL中 #{} 被替换为 “?”,这里的 “?”叫变量占位符,在实际执行SQL时会用“xx”的实际值替换变量占位符,效率更高,可以防止SQL注入SQL预编译:MySQL执行SQL有几个步骤,“查缓存->[语法分析->优化->编译-&…

三文带你轻松上手鸿蒙的 AI 语音 01-实时语音识别

三文带你轻松上手鸿蒙的 AI 语音 01-实时语音识别 前言 HarmonyOSNext中集成了强大的 AI 功能。Core Speech Kit(基础语音服务)是它提供的众多 AI 功能中的一种。 Core Speech Kit(基础语音服务)集成了语音类基础 AI 能力,包括文本转语音(TextToSpeech)及语音识别(Spee…

【原创】ARM64 实时linux操作系xenomai4(EVL)构建安装简述

本文简要记录在瑞芯微RK3588(ARM64)构建安装实时linux操作系统xenomai4的过程,以及实时性测试,希望对你有所帮助!目录0 环境说明1 内核构建2 库编译方式1 交叉编译方式2 本地编译3 测试单元测试hectic:EVL 上下文切换latmus:latency测试4 RK3588 xenomai4实时性能5 总结 本…