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

news2024/10/7 12:25:19

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.coloradmin.cn/o/1351906.html

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

相关文章

开源CalDAV和CardDav网页客户端InfCloud

本文应网友 畅天 的要求折腾。他遇到了跨域问题&#xff0c;所以老苏找了个二合一的镜像来规避。其中使用的 Baikal 和 InfCloud 都是最新的版本&#xff1b; 什么是 Baikal &#xff1f; Baikal 是一个免费的开源自托管 CalDAV 和 CardDAV 服务器&#xff0c;适用于想要管理其…

普中STM32-PZ6806L开发板(HAL库函数实现-TIM5 设置 PWM input, 获取频率跟占空比)

简介 初始化 TIM5 为 PWM input CH1&#xff0c; 获取输入PWM的频率和占空比电路原理图 连线 将 PC7 与 PA0使用跳线进行连接 其他知识 APIs /* Blocking mode: Polling */ HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); // 堵塞捕获开…

微信好友添加频繁的原因

01 微信好友添加频繁的原因 1. 添加好友的频率太高&#xff1a;短时间内添加多个好友&#xff0c;系统会认为账号被盗&#xff0c;从而限制用户添加好友&#xff1b; 2. 频繁的发送好友请求&#xff1a;在短时间内连续发送好友请求&#xff0c;也会导致微信限制操作&#xff0…

2021-01-03 excel实现列递增,行保持不变

需求&#xff1a;excel文档数据操作的时候发现自动递增只能实现列不变行号递增 我这里里需要的是列递增行不变 解决方式&#xff1a;通过一些函数的组合使用 INDIRECT("驻场明细!"&CHAR(ROW()62)&ROW(驻场明细!A$28)) INDIRECT()函数的使用&#xff1a; INDI…

Android studio ViewPager2应用设计

一、ViewPager2应用场景&#xff1a; ViewPager2是一个功能强大的滑动容器&#xff0c;提供灵活的页面切换和布局定制功能&#xff0c;使得应用程序界面更加丰富和交互性强&#xff0c;主要应用于以下场景&#xff1a; 1&#xff09;、实现引导页或欢迎页&#xff1a;ViewPag…

妙手ERP功能更新:优化各平台描述设置、Ozon去除会员价设置、对接速虎速运.......

为了给卖家朋友带来更好的使用体验&#xff0c;更高效地运营跨境店铺&#xff0c;妙手ERP在上周优化了以下多项功能。 01、产品模块优化 全平台 - 优化各平台认领配置中的描述设置&#xff1a;具体优化见各平台描述设置 - 采集亚马逊产品到公用采集箱时&#xff0c;简易描述默…

助力成长的开源项目 —— 筑梦之路

闯关式 SQL 自学&#xff1a;sql-mother 免费的闯关式 SQL 自学教程网站&#xff0c;从 0 到 1 带大家掌握常用 SQL 语法&#xff0c;目前一共有 30 多个关卡&#xff0c;希望你在通关的时候&#xff0c;变身为一个 SQL 高手。除了闯关模式之外&#xff0c;这个项目支持自由选…

基于ssm的校友录的设计与实现+jsp论文

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

声明式管理方(yaml)文件

声明式管理方(yaml)文件: 1、适合对资源的修改操作 2、声明式管理依赖于yaml文件&#xff0c;所有的内容都在yaml文件当中。 3、编辑好的yaml文件需要依靠陈述是还是要依靠陈述式的命令发布到k8s集群当中 create只能创建&#xff0c;不能更新。从指定yaml文件中读取配置&#…

深度确定性策略梯度 DDPG

深度确定性策略梯度 DDPG 深度确定性策略梯度 DDPG模型结构目标函数算法步骤适合场景 深度确定性策略梯度 DDPG A2C、A3C 都是在线策略&#xff0c;在与环境交互时&#xff0c;样本参数更新效率低&#xff0c;所以主要是应用在离散空间&#xff0c;计算量没那么大。 DDPG 专用…

脆弱的SSL加密算法漏洞原理以及修复方法

漏洞名称&#xff1a;弱加密算法、脆弱的加密算法、脆弱的SSL加密算法、openssl的FREAK Attack漏洞 漏洞描述&#xff1a;脆弱的SSL加密算法&#xff0c;是一种常见的漏洞&#xff0c;且至今仍有大量软件支持低强度的加密协议&#xff0c;包括部分版本的openssl。其实&#xf…

x-cmd pkg | lazygit - git 命令的终端 UI

目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 lazygit 由 Jesse Duffield 于 2018 年使用 Go 语言构建的 git 终端交互式命令行工具&#xff0c;旨在终端界面中便捷管理 git 存储库。 首次用户 使用 x lazygit 即可自动下载并使用 在终端运行 eval "$(curl …

栈的经典算法问题(算法村第四关白银挑战)

括号匹配问题 有效的括号 20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类…

包围盒体积-体积计算

文章目录 环境&#xff1a;1.1 包围盒法介绍&#xff1a;2.1 python代码3.1 可视化4.1 体积Calculation 环境&#xff1a; Open3D 1.1 包围盒法介绍&#xff1a; 求解离散点最优包围空间 常用的凸包算法&#xff1a; AABB OOB 2.1 python代码 conda activete deeplabv3plus(…

一起读《奔跑吧Linux内核(第2版)卷1:基础架构》- 大小端字节序

关注 点赞 不错过精彩内容 大家好&#xff0c;我是硬核王同学&#xff0c;最近在做免费的嵌入式知识分享&#xff0c;帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! Hello&#xff0c;大家好我是硬核王同学&#xff0c;是一名刚刚工作一年多的Linux工程师&#xff0…

【hyperledger-fabric】将智能合约部署到通道

简介 本文主要来自于B站视频教学视频&#xff0c;也主要参看了官方文档中下图这一章节。针对自己开发的代码做出相应的总结。 1.启动网络 # 跳转到指定的目录 cd /root/fabric/fabric-samples/test-network# 启动docker容器并且创建通道 ./network.sh up createChannel2.打…

CMake支持的编译平台和IDE

文章目录 简介支持的IDEVisual Studio支持示例 其他编译器和生成器支持MinGW示例 IDE集成Eclipse示例 实验性和特殊平台支持总结 简介 CMake是一个非常强大的跨平台自动化构建工具&#xff0c;它支持生成多种类型的项目文件&#xff0c;覆盖了广泛的开发环境和编译器。在这篇博…

wordpress在界面将站点地址直接修改为https导致上不去问题的解决办法

wordpress在界面将站点地址直接修改为https导致上不去问题的解决办法 #修改数据库yz_options

【Matlab】基于遗传算法优化BP神经网络 (GA-BP)的数据时序预测(附代码)

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/88682033 一&#xff0c;概述 基于遗传算法优化BP神经网络 (GA-BP) 的数据时序预测是一种常用的机器学习方法&#xff0c;用于预测时间序列数据的趋势和未来值。 在使用这种方法之前&#xff0c;需要将时间序…

Nacos设置账号密码

1、控制台设置 # 开启账号密码验证 nacos.core.auth.enabledtrue# 设置账号密码 nacos.core.auth.usernamenacos nacos.core.auth.passwordnacos1232、数据库设置 密码为&#xff1a;nacos&#xff0c;对应加密信息是&#xff1a; $2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2k…