通过软盘拷贝文件 - 华为OD统一考试

OD统一考试(B卷)

分值: 200分

题解: Java / Python / C++

alt

题目描述

有一名科学家想要从一台古董电脑中拷贝文件到自己的电脑中加以研究但此电脑除了有一个3.5寸软盘驱动器以外,没有任何手段可以将文件持贝出来,而且只有一张软盘可以使用,因此这一张软盘是唯一可以用来拷贝文件的载体。

科学家想要尽可能多地将计算机中的信息拷贝到软盘中,做到软盘中文件内容总大小最大。已知该软盘容量为1474560字节。文件占用的软盘空间都是按块分配的,每个块大小为512个字节。一个块只能被一个文件使用。拷贝到软盘中的文件必须是完整的,且不能采取任何压缩技术。

输入描述

第1行为一个整数N,表示计算机中的文件数量。1≤ N < 1000。

第2行到第N+1行(共N行),每行为一个整数,表示每个文件的大小 s i s_i si,单位为字节.0 < i < N,0< s i s_i si< 1000000

输出描述

科学家最多能拷贝的文件总大小。

备注

为了充分利用软盘空间,将每个文件在软盘上占用的块记录到本子上。即真正占用软盘空间的只有文件内容本身。

示例1

输入:
3
737270
737272
737288输出:
1474542

题解

这个问题是经典的01背包问题可以使用动态规划来解决。

软盘块容量相当于背包的容量,文件的大小相当于价值。

代码思路

定义一个一维数组dp,其中dp[vol]表示在软盘容量为vol块的情况下,科学家最多能拷贝的文件总大小。初始时,将所有元素初始化为0。

接下来,对于每个文件的大小,计算它所占的块数,即block = ceil(size / 512),然后使用动态规划更新dp数组。

具体的更新方式是:

  • 对于每个vol,如果vol >= block,则更新dp[vol] = max(dp[vol], dp[vol - block] + size)。这表示在软盘容量为vol块的情况下,科学家可以选择拷贝当前文件,也可以选择不拷贝当前文件,取两者之间的最大值。

最终,dp[BLOCK_VOLUME]即为科学家最多能拷贝的文件总大小。

Java

import java.util.Scanner;
/*** @author code5bug*/
public class Main {public static void main(String[] args) {// 软盘容量的块数int BLOCK_VOLUME = 1474560 / 512;Scanner scanner = new Scanner(System.in);// 读取文件数量int n = scanner.nextInt();// 存储每个文件的大小int[] sizes = new int[n];for (int i = 0; i < n; i++) {sizes[i] = scanner.nextInt();}int[] dp = new int[BLOCK_VOLUME + 1];for (int size : sizes) {int block = (int) Math.ceil((double) size / 512);  // 存储文件所占的块数for (int vol = BLOCK_VOLUME; vol >= block; vol--) {dp[vol] = Math.max(dp[vol], dp[vol - block] + size);}}System.out.println(dp[BLOCK_VOLUME]);}
}

Python

# 软盘的块数
from math import ceil# 软盘容量的块数
BLOCK_VOLUME = 1474560 // 512
n = int(input())
# 存储每个文件的大小
sizes = [int(input()) for _ in range(n)]dp = [0] * (BLOCK_VOLUME + 1)
for size in sizes:block = ceil(size / 512)  # 存储文件所占的块数for vol in range(BLOCK_VOLUME, block - 1, -1):dp[vol] = max(dp[vol], dp[vol - block] + size)print(dp[BLOCK_VOLUME])

C++

#include <iostream>
#include <vector>using namespace std;int main() {// 软盘容量的块数const int BLOCK_VOLUME = 1474560 / 512;int n;cin >> n;// 存储每个文件的大小vector<int> sizes(n);for (int i = 0; i < n; ++i) {cin >> sizes[i];}// dp数组初始化vector<int> dp(BLOCK_VOLUME + 1, 0);for (int size : sizes) {// 存储文件所占的块数int block = (size - 1) / 512 + 1;for (int vol = BLOCK_VOLUME; vol >= block; --vol) {dp[vol] = max(dp[vol], dp[vol - block] + size);}}cout << dp[BLOCK_VOLUME] << endl;return 0;
}

相关练习题

题号题目难易
LeetCode 416416. 分割等和子集中等
LeetCode 474474. 一和零中等
LeetCode 494494. 目标和中等

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

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

相关文章

【算法挨揍日记】day45——474. 一和零、879. 盈利计划

474. 一和零 474. 一和零 题目描述&#xff1a; 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 解…

电力系统中非线性负载是什么

电力系统中的非线性负载是指负载电流与负载电压之间不呈线性关系的负载&#xff0c;传统的线性负载&#xff0c;如电阻、电感和电容等&#xff0c;其电流与电压之间的关系符合欧姆定律&#xff0c;即电流与电压成正比。而非线性负载则不符合欧姆定律&#xff0c;其电流与电压之…

JavaScript:作用域变量回收

JavaScript&#xff1a;作用域&变量回收 局部作用域函数作用域块作用域 全局作用域作用域链变量在浏览器模型中的位置浏览器模型全局变量的产生情况直接赋值全局对象与var全局对象的区别 垃圾回收机制引用计数法标记清除法 闭包变量提升&函数提升 作用域规定了变量能够…

SPSS23软件安装包下载及安装教程

SPSS 23下载链接&#xff1a;https://docs.qq.com/doc/DUkRHVUxFUkVBUUlj 1.选中下载好的安装包&#xff0c;鼠标右键解压到“SPSS 23 64bit”文件夹 2.打开”Setup“文件夹 3.选中”Setup.exe“鼠标右击选择以管理员身份运行 4.点击“下一步” 5.点击“下一步” 6.选择“我接受…

在Linux运行LaTeX

共有三个步骤1. 装LaTexTeX Live - TeX Users Group 下载对应版本安装包安装 文件比较大&#xff0c;这步花的时间多一点&#xff0c;不过也不会太多&#xff0c;感觉5分钟十分钟的样子吧 2. 装TexStidio 这一步是安装一个类似在windows系统下的TaTeX GUI软件 图标是这样3. 配置…

基于AM62x的ARM+FPGA+Codesys低成本软PLC解决方案

GPMC并口简介 GPMC(General Purpose Memory Controller)是TI处理器特有的通用存储器控制器接口&#xff0c;支持8/16bit数据位宽&#xff0c;支持128MB访问空间&#xff0c;最高时钟速率133MHz。GPMC是AM62x、AM64x、AM437x、AM335x、AM57x等处理器专用于与外部存储器设备的接口…

Java学习——设计模式——结构型模式2

结构型模式 结构型模式主要涉及如何组合各种对象以便获得更好、更灵活的结构。虽然面向对象的继承机制提供了最基本的子类扩展父类的功能&#xff0c;但结构型模式不仅仅简单地使用继承&#xff0c;而更多地通过组合与运行期的动态组合来实现更灵活的功能。 包括&#xff1a; 1…

工程中uint8变量文件比uint32变量文件大4字节的问题排查

前言 &#xff08;1&#xff09;如果有嵌入式企业需要招聘湖南区域日常实习生&#xff0c;任何区域的暑假Linux驱动实习岗位&#xff0c;可C站直接私聊&#xff0c;或者邮件&#xff1a;zhangyixu02gmail.com&#xff0c;此消息至2025年1月1日前均有效 &#xff08;2&#xff0…

QCustomPlot(一)设置环境

1 设置QCustomPlot环境 将QCustomPlot与你的应用程序配合使用非常简单&#xff1a; 从下载部分获取最新版本的QCustomPlot。 像使用其他普通的类文件一样&#xff0c;使用qcustomplot.h和qcustomplot.cpp文件。 1.1 QtCreator用户 在左侧边栏中右键单击项目的根目录条目&a…

小程序js常用工具及请求关键代码的封装

一个js常用工具及请求关键代码的封装随着时间变迁。 一 2017年 第一版web管理后台在用 web后台管理页面用 /*** Created by hua on 2017/8/24.*/ var requestResult{success :0,failure:1,failureMsg:2 }jx{reqAjax:function (isSync,url,fnSuccess,fnFailure) {$.ajax({typ…

向日葵远程控制软件MySQL5.7的安装与配置

目录 一. 向日葵远程控制软件 1.1 简介 1.2 选择原因 1.3 安装及使用 1.4 使用场景 二. MySQL5.7 安装与配置 2.1 什么是MySQL 2.2 安装 MySQL5.7 2.2.1 安装步骤 2.2.2 内部连接 2.2.3 外部连接 三. 思维导图 一. 向日葵远程控制软件 1.1 简介 向日葵电脑版是一款拥有多年…

智能化校园:深入探讨云端管理系统设计与实现(一)

推荐阅读 轻松驾驭JDBC&#xff1a;一篇文章帮你搞定数据库连接 ChatGPT爆火一周年&#xff0c;快来拥有专属你的ChatGPT应用&#xff01; 文章目录 推荐阅读智慧校园云端管理系统的设计和实现项目简介项目技术栈项目功能项目开发项目搭建修改pom.xml文件项目包结构配置applic…