RosettaCodeData/Task/Greatest-subsequential-sum/Mathprog/greatest-subsequential-sum-...

37 lines
604 B
Plaintext

/*Special ordered set of type N
Nigel_Galloway
January 26th, 2012
*/
param Lmax;
param Lmin;
set SOS;
param Sx{SOS};
var db{Lmin..Lmax,SOS}, binary;
maximize s : sum{q in (Lmin..Lmax),t in (0..q-1), z in SOS: z > (q-1)} Sx[z-t]*db[q,z];
sos1 : sum{t in (Lmin..Lmax),z in SOS: z > (t-1)} db[t,z] = 1;
solve;
for{t in (Lmin..Lmax),z in SOS: db[t,z] == 1} {
printf "\nA sub-sequence of length %d sums to %f:\n", t,s;
printf{q in (z-t+1)..z} " %f", Sx[q];
}
printf "\n\n";
data;
param Lmin := 1;
param Lmax := 6;
param:
SOS: Sx :=
1 7
2 4
3 -11
4 6
5 3
6 1
;
end;