Ja bym zaczął od tego do czego się nadaje pracownik. A dokładniej wyznaczyłbym przedział czasowy jaki byłby w pracy gdyby był pracoholikiem. W ten sposób stwierdziłbym, którzy pracownicy są najbardziej niezastąpieni, bo ci co przekroczyli by 8 godzin nie mogli by pójść do następnego zadania, a być może tylko oni mogli by je wykonać.
Na tej podstawie posortowałbym pracowników najpierw w porządku rozpoczynającym się od tych, którzy jako pracoholicy siedzieli by najkrócej, następnym kryterium sortowania była by uniwersalność pracownika (licząc tylko te zadania, które występują w danym dniu) pracownika zaczynając od najmniej uniwersalnego.
Względnie można pomieszać te kryteria z pewnymi wagami. Można też uwzględnić ile jest potrzebnych roboczogodzin do zadań danego typu, a ile jest dostępnych pracowników do tego zadania i na tej podstawie dodać ograniczenia/priorytety.
Korzystając z tego sortowania rozdałbym zadania na głupa zaczynając od nieroba a kończąc na mistrzu zmiany.
Ta metoda dobra by była na początek, potem należałoby zacząć myśleć nad innymi metodami (algorytm genetyczny?).
Biorąc pod uwagę algorytmiczną skalę problemu, to najważniejsze żebyś zaczął od napisania programu testującego, który w tym wypadku byłby naprawdę prosty.