课程
416 字
约 2 分钟
大一上
实践案例 06:宿舍资源利用率管理系统方案
计算机科学导论exercises/computational_thinking·更新于 2026-09-15
实践案例 06:宿舍资源利用率管理系统方案
本报告探讨高校宿舍资源分配的多目标优化模型与 C++ 算法设计。
一、 题目描述
假设有 栋宿舍楼,每栋有 个房间,每个房间可住 个人;有 个学院的学生需要住宿,第 个学院的学生数为 。
如何设计宿舍分配与管理方案,以最大限度提高宿舍资源利用率?
二、 解题思路与优化策略
为提高利用率并减少空间碎片(空余床位):
- 容量预计算:每栋楼总容量 ;
- 贪心排序分配:将学院按学生数 降序排列,优先为人数多的学院整栋分配宿舍;
- 混合拆分与尾部填充:对尾部不足一栋楼的余数学生,采用“首次适应算法”(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;
}












