视频加载失败

课程

416 字
约 2 分钟

实践案例 06:宿舍资源利用率管理系统方案

计算机科学导论exercises/computational_thinking·更新于 2026-09-15

实践案例 06:宿舍资源利用率管理系统方案

本报告探讨高校宿舍资源分配的多目标优化模型与 C++ 算法设计。


一、 题目描述

假设有 nn 栋宿舍楼,每栋有 mm 个房间,每个房间可住 kk 个人;有 jj 个学院的学生需要住宿,第 ii 个学院的学生数为 sis_i

如何设计宿舍分配与管理方案,以最大限度提高宿舍资源利用率?


二、 解题思路与优化策略

为提高利用率并减少空间碎片(空余床位):

  1. 容量预计算:每栋楼总容量 C=m×kC = m \times k
  2. 贪心排序分配:将学院按学生数 sis_i 降序排列,优先为人数多的学院整栋分配宿舍;
  3. 混合拆分与尾部填充:对尾部不足一栋楼的余数学生,采用“首次适应算法”(First Fit)填充至剩余床位数相近的宿舍楼中,减少跨楼混住。

三、 C++ 算法实现

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct Dormitory {
    int id;
    int remainingBeds;
};

bool compareDormitories(const Dormitory& a, const Dormitory& b) {
    return a.remainingBeds > b.remainingBeds;
}

void manageDormitories(int n, int m, int k, int j, const vector<int>& studentCounts) {
    int totalCapacity = m * k;
    vector<Dormitory> dorms(n);
    for (int i = 0; i < n; ++i) {
        dorms[i] = {i + 1, totalCapacity};
    }

    for (int i = 0; i < j; ++i) {
        int students = studentCounts[i];
        sort(dorms.begin(), dorms.end(), compareDormitories);

        for (int d = 0; d < n && students > 0; ++d) {
            int allocated = min(dorms[d].remainingBeds, students);
            dorms[d].remainingBeds -= allocated;
            students -= allocated;
            cout << "学院 " << (i + 1) << " 向宿舍楼 " << dorms[d].id 
                 << " 分配 " << allocated << " 人,楼剩余床位: " 
                 << dorms[d].remainingBeds << endl;
        }
    }
}

int main() {
    int n = 5;  // 5栋楼
    int m = 50; // 每栋50间
    int k = 4;  // 每间4人 -> 每栋200人
    int j = 3;  // 3个学院
    vector<int> studentCounts = {450, 320, 180}; // 总人数 950 人

    manageDormitories(n, m, k, j, studentCounts);
    return 0;
}
Profile Image of the Author
Sonder
好想要技术
这是公告标题
这只是一个公告
分类
标签
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.7
文章许可
CC BY-NC-SA 4.0
文章目录