Here is an example solution in javascript. Can be checked in the browser
function calc( sum, cost, weight ){ var min = [], //ΠΠ°ΡΡΠΈΠ² ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ
ΡΡΠΎΠΈΠΌΠΎΡΡΠ΅ΠΉ max = [], //ΠΠ°ΡΡΠΈΠ² ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ
ΡΡΠΎΠΈΠΌΠΎΡΡΠ΅ΠΉ c_cost, c_weight, //ΠΠ΅Ρ/Π‘ΡΠΎΠΈΠΌΠΎΡΡΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΌΠΎΠ½Π΅Ρ c_min, c_max, //ΠΠΈΠ½/ΠΠ°ΠΊΡ ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²Π΅ΡΠ° t_min, t_max, //ΠΠΈΠ½/ΠΠ°ΠΊΡ Π²Π΅Ρ ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ ΠΏΡΠΈ //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΡΠΎΠΉ ΠΌΠΎΠ½Π΅ΡΡ w, j, //Π‘ΡΡΡΡΠΈΠΊ ΠΏΠΎ Π²Π΅ΡΡ ΠΈ ΠΏΠΎ ΠΌΠΎΠ½Π΅ΡΠ°ΠΌ mj = cost.length; //ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ»-Π²ΠΎ ΠΌΠΎΠ½Π΅Ρ min[0] = max[0] = 0; //ΠΠ»Ρ Π²Π΅ΡΠ° 0 ΠΈ 0 //ΠΡΠΎΡ
ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π²Π΅ΡΠ°ΠΌ for ( w = 1; w <= sum; w++ ){ c_min = 0; //ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ, ΡΠ°ΠΊΠΎΠ³ΠΎ Π²Π΅ΡΠ° Π½Π΅Π»ΡΠ·Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ c_max = 0; //ΠΈ ΠΏΠΎΡΠΎΠΌΡ Π΅Π³ΠΎ ΠΌΠΈΠ½ ΠΈ ΠΌΠ°ΠΊΡ ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ - 0 //ΠΡΠΎΡ
ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΌΠΎΠ½Π΅Ρ for ( j = 0; j < mj; j++ ){ c_cost = cost[j]; //Π‘ΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ c_weight = weight[j]; //Π’Π΅ΠΊΡΡΠ΅ΠΉ ΠΌΠΎΠ½Π΅ΡΡ //ΠΡΠ»ΠΈ Π²Π΅Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΌΠΎΠ½Π΅ΡΡ ΡΠ°Π²Π΅Π½ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ Π²Π΅ΡΡ, //ΡΠΎ ΡΡΠΎΡ Π²Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ if ( w == c_weight ){ //ΠΡΠ»ΠΈ Π²Π΅Ρ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π°Π»ΡΡ ΡΠ°Π½Π΅Π΅, ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΌΠΈΠ½ ΡΡΠΎΠΈΠΌΠΎΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΌΠΎΠ΅ΠΉ if ( ( c_min == 0 ) || ( c_min > c_cost ) ) c_min = c_cost; //ΠΡΠ»ΠΈ ΠΌΠ°ΠΊΡ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠΎΠ΅ΠΉ if ( c_max < c_cost ) c_max = c_cost; } //ΠΡΠ»ΠΈ Π²Π΅Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΌΠΎΠ½Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ Π²Π΅ΡΡ else if ( w > c_weight ){ //ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΠΊΠ°ΠΊΠΈΠΌΠΈ ΡΡΠ°Π½ΡΡ ΠΌΠΈΠ½ ΠΈ ΠΌΠ°ΠΊΡ ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ //ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΡΠΎΠΉ ΠΌΠΎΠ½Π΅ΡΡ t_min = min[ w - c_weight ] + c_cost; t_max = max[ w - c_weight ] + c_cost; //ΠΡΠ»ΠΈ Π²Π΅Ρ ( w - c_weight ) - Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ, //ΡΠΎ Π΅ΡΠ»ΠΈ Π²Π΅Ρ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π°Π»ΡΡ ΡΠ°Π½Π΅Π΅, ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΌΠΈΠ½ ΡΡΠΎΠΈΠΌΠΎΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΌΠΎΠ΅ΠΉ if ( ( t_min != c_cost ) && ( ( c_min == 0 ) || ( c_min > t_min ) ) ) c_min = t_min; //ΠΡΠ»ΠΈ Π²Π΅Ρ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π°Π»ΡΡ ΡΠ°Π½Π΅Π΅, ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΌΠ°ΠΊΡ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠΎΠ΅ΠΉ if ( ( t_max != c_cost ) && ( c_max < t_max ) ) c_max = t_max; } } //ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΠ°ΠΌΡΡΡ min[ w ] = c_min; max[ w ] = c_max; } return [ min[sum], max[sum], min, max ]; } cost = [ 1, 2, 3 ]; weight = [ 2, 4, 5 ]; sum = 36; res = calc( sum, cost, weight ); if ( res[0] && res[1] ) console.log( res[0], ' ', res[1] ); else console.log('This is impossible.');