# Best optimization algorithm for resource allocation

Suppose I have a data set where the letters are patients $(a-z)$ and the numbers are screening procedures $(1-6):$

a:  1,2,3,5
b:  1,2,3
c:  2,1,6
.
.
.
z: 1,2,3,4,5,6


Each screening procedure has an associated cost and by removing certain screening procedures, the hospital can allocate resources elsewhere.Thus,the objective function is maximized if I remove as many of the screening procedures as possible.The constraint however is that at least 50% of the patients should have their screening procedures unchanged(not removed). Also, if I remove a screening procedure, the change is applied across all users. What are some good optimization algorithms to deal with this type of problem? This is just an example data set, so the real data set will contains millions of rows(for each patient) and hundreds of different procedures. I was thinking simulated annealing,hill climbing are good starting points. Are there better methods?