Похоже, что задачу можно легко формализовать в терминах целочисленного (а точнее даже булева) программирования, если ввести (как обычно в подобных задачах) булевы переменные

или

в зависимости от присутствия человека номер

на вахте номер

(под "вахтой" я понимаю пару: объект и период времени).
Тогда постоянное присутствие кого-то на определенном объекте в определенный период будет задаваться требованием неравенства нулю суммы

по всем

для каждого фиксированного

. Впрочем и достаточность мест в общаге будет задаваться похожим условием, разве что вместо

возможно надо будет суммировать

и т.д. и т.п.
Ну а про приближенное (или даже точное) решение задач целочисленного программирования все (или почти все) известно. Можно, например, использоваться релаксацию исходной задачи до задачи линейного программирования и т.д.