题目就是给出$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;
}