【编程题目 | 200分】内存资源分配 [ 2021 Q1 考试题 ]


相似题目:华为机试内存资源分配-大厂笔经 (online1987.com)


时间限制:C/C++ 1000ms | 其他语言:2000ms

空间限制:C/C++ 262144K | 其他语言:524288K

64bit IO Format:%lld


本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,

编码后请点击”保存并提交“按钮进行代码提交。


题目描述

内存资源分配

定义了如下内存管理规则:

(1)按块进行内存管理,有若干个pool,每个pool管理一种大小内存块;每块内存的地址是连续的,但是内存块间地址不连续

(2)只要不超过内存块大小,该内存块可以被多次申请;

(3)一次内存申请只能从一个内存块中申请,不能跨内存块申请;

(4)剩余内存大小仅统计完全未被使用的内存块的总大小;

要求给定申请内存块的需求,求解剩下的完全未使用的内存块大小总和最大是多少?

注意:只要有一次申请不到内存,返回-1;

输入描述:

  1. 第一行输入N,代表不同规格内存的个数。
  2. 之后N行分别输入该规格内存的个数、内存的规格,使用空格分隔。
  3. 第N+2行输入M,代表需要申请的内存数目,单位为KByte 。
  4. 之后一行输入M个内存的大小,使用空格分隔。
  5. 其中N小于50,总的内存块个数小于50,M小于15。

如:三种内存块,分别是:2块大小4KByte的内存,3块大小8KByte的内存,4块大小16KByte的内存,输入格式:

3

2 4

3 8

4 16

一次申请7KByte,9KByte,11KByte,4KByte这4块内存,输入格式:

4

7 9 11 4

输出描述:

输出的剩余内存块大小:64KByte,输出格式:

64

备注:

  • 如果没有优化方法,可能申请情况如下:
  • 7KByte占用1个8KByte内存块,9KByte占用1个16KByte内存块,11KByte占用1个16KByte内存块,4KByte占用1个4KByte内存块
  • 这样,完全未使用的内存块总大小是 4KByte + 2*8KByte + 2*16KByte = 52KByte

—————————————————————————————————————————————

  • 如果优化方法,申请如下:
  • 7KByte占用1个16KByte内存块,9KByte复用之前16KByte内存块剩下的内存,11KByte占用1个16KByte内存块,4KByte占用之前16KByte剩下的内存
  • 这样,完全未使用的内存块总大小是 2*4KByte + 3*8KByte + 2*16KByte = 64KByte

示例1  输入输出示例仅供调试,后台判题数据一般不包含示例

输入

3

2 4

3 8

4 16

4

7 9 11 4

输出

64


代码实现


CPP


剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看