#L0354. Allocator
Allocator
题目背景
小符同学接手了一个轻量级内核的内存分配器(Allocator)模块。由于之前的物理内存管理策略存在缺陷,内存页中布满了碎片。他现在需要找出一块连续的物理内存区域,用来存放一个重要的数据结构。
题目描述
内核的物理内存被划分为 个连续的内存页,状态由一个长度为 的数组表示:0 表示该页空闲,1 表示该页已被占用。
小符需要分配一个长度恰好为 个页的连续内存块。由于系统支持页面迁移,如果选中的长度为 的区域中包含已被占用的页,系统需要将这些占用页迁移走,每迁移一个占用页会产生 1 点“性能损耗”。
请你通过枚举所有可能的连续区间,帮小符计算出分配这 个连续页所能达到的最小性能损耗是多少?
输入格式
第一行包含两个正整数 和 ,表示物理内存的总页数和需要分配的连续页数。
第二行包含 个用空格分隔的整数(仅为 0 或 1),依次表示每个内存页的状态。
输出格式
输出一个整数,表示最小的性能损耗。
数据范围
对于 100% 的数据:
样例
8 3
1 0 1 0 0 0 1 0
0
样例解释
枚举所有长度为 3 的连续区间,计算其包含的 1 的个数(即损耗):
[1, 0, 1] 损耗为 2
[0, 1, 0] 损耗为 1
[1, 0, 0] 损耗为 1
[0, 0, 0] 损耗为 0 (第 4 到第 6 个页)
[0, 0, 1] 损耗为 1
[0, 1, 0] 损耗为 1
最小损耗为 0。