1. A computer-implemented method of scheduling a set of workers, each worker associated with one of a set of flexibility classifications, the classifications including a non-flex-time classification and at least one flex-time classification, comprising the steps of: receiving a set of shift constraints; creating a set of shift templates representing at least two variations allowed by the shift constraints; determining a number of instances of each shift template to cover forecasted demand over a planning period; creating the determined number of shifts instances; and producing a set of staff mix enumerations to cover the shift instances, the set of enumerations varying from a first enumeration including zero workers of the at least one non-flex-time classification and a first computed number of workers of the flex-time classification, to a last enumeration including a maximum number of workers of the at least one non-flex-time classification and a last computed number of workers of the flex-time classification, wherein the producing step further comprises: assigning the shift instances to the set of workers by an iteration of each worker, wherein the iteration comprises: applying dynamic programming to assign the shift instances within the planning period to a selected one of the workers, such that total hours assigned to the selected worker approach, but do not exceed, a per-interval maximum associated with the classification of the selected worker, wherein workers having a classification other than flex-time are selected before workers having a flex-time classification.