题目就是给出$a,b,c$和$S$,求出一组非负数$x,y,z$ 使得$x+y+z=S$,并且要求${x^a}{y^b}{z^c}$最大
有公式,可以直接套用
但要注意$a=b=c=0$的情况,要特殊处理,否则当$x=\frac{Sa}{a+b+c}$ $y=\frac{Sb}{a+b+c}$ $z=\frac{Sc}{a+b+c}$时${x^a}{y^b}{z^c}$最大
可以证明,此处证明略,有兴趣的可以参考这篇文章1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using namespace std;
int main()
{
int n,a,b,c;
while(cin>>n>>a>>b>>c)
{
int s=a+b+c;
double ans=(1.0*n/s);
if(a==0&&b==0&&c==0)
printf("%.1lf %.1lf %.1lf\n",0.0,0.0,0.0);
else
printf("%.16f %.16f %.16f\n",ans*a,ans*b,ans*c);
}
return 0;
}