set ITEMS:=1..5;
param knapsack_size:=50;
param size{i in ITEMS};
param benefit{i in ITEMS};
set S{k in 1..5} := {j in ITEMS: size[j] > knapsack_size/k};
var copies{j in ITEMS} >=0;
maximize total_benefit: sum{j in ITEMS}benefit[j]*copies[j];
subject to size_constraint: sum{j in ITEMS}size[j]*copies[j]<=knapsack_size;
#s.t. cutplane{k in 1..5}: sum{j in S[k]}copies[j] <= k-1;
data;
param size:=
1 21
2 11
3 51
4 26
5 30;
param benefit:=
1 37
2 12
3 500
4 50
5 41;