maxim = 0;//suma maxima pe care am format-o
format[0]=1;
for(i=1;i<=N;i++)
{
in>>nr;
for(j=maxim;j>=0;j--)
if(format[j]) //daca am format deja suma j
format[nr+j]=1; //marchez suma j+nr ca fiind formata
if(maxim<=S)maxim+=nr; //actualizez suma maxima.daca este mai mare decat S nu are rost sa o mai actualizez
}
Pentru fiecare suma deja formata aduni valoarea citita formand astfel noi sume.