Yesterday I was trying to solve this problem on codeforces and found its solution very interesting .. to be honest I had to do alot of research to understand the editorial solution .. so I managed to write a clearer documentation for how to solve these kind of problems.
First of all the problem is that you are trying to maximize f(x,y,z) = x^a Y^b Z^c with the constraint function g(x,y,z) = X+Y+Z = S ..
First of all if (a,b,c) = (0,0,0) then the maximum you get for f(x,y,z) is 1 :) .. otherwise lets solve the problem of at least having one of them > 0.
We can use Lagrange multiplier to solve this problem by doing the following:
=> f(x,y,z) = ƛg(x,y,z) -> Lagrange multiplier
=> x^a . y^b . z^c = ƛ(x+y+z)
by taking derivative d/dx we get:
=> ax^(a-1) . y^b . z^c = ƛ(1+0+0) = ƛ -> (1)
by taking the derivative d/dy we get:
=> bx^a . y^(b-1) . z^c = ƛ(0+1+0) = ƛ -> (2)
by taking the derivative d/dz we get:
=> cx^a . y^b . z^(c-1) = ƛ(0+0+1) = ƛ -> (3)
This implies the following:
=> ax^(a-1) . y^b . z^c = bx^a . y^(b-1) . z^c = cx^a . y^b . z^(c-1) = ƛ
=> (1) = (2) = (3)
By solving (1) and (2) together we get:
=> ax^(a-1) . y^b . z^c = bx^a . y^(b-1) . z^c = ƛ
=> ax^(a-1) . y^b = bx^a . y^(b-1)
=> bx = ay
=> a/x = b/y -> (4)
By solving (2) and (3) we get:
=> bx^a . y^(b-1) . z^c = cx^a . y^b . z^(c-1)
=> bx^a . y^(b-1) . z^c = cx^a . y^b . z^(c-1)
=> bz = cy
=> c/z = b/y -> (5)
From (4) and (5) we get:
a/x = b/y = c/z -> (6)
Now we can use this fact in g(x,y,z) we get:
=> x+y+z = S
=> x+y+z = S
=> x+bx/a+cx/a = S
=> ax+bx+cx = Sa
=> x = Sa/(a+b+c) -> (7)
Doing the same for y and z you get:
=> y = Sb/(a+b+c)
=> y = Sb/(a+b+c)
=> z = Sc/(a+b+c)
Now the problem is solved and here is my code: