TBD本题是一道数学题
容易证明当x1:x2:x3...:xk=a1:a2:a3...:ak时,结果最大。
所以xi = a * ai / sum(ai)
带入即可求得最大值。
TBD本题是一道数学题
容易证明当x1:x2:x3...:xk=a1:a2:a3...:ak时,结果最大。
所以xi = a * ai / sum(ai)
带入即可求得最大值。
Hi Dear. How are you? I hope fine, My name is Adelina,I work as an Senior Audit / banker, I wish us to become friends. Contact me with my mail: (adelinaserrano1980@gmail.com) Let us share details and photos. I expect your message.Thank Adelina
但是不知道为什么,我的程序能输出正确结果,但是系统判定我的程序只得50分,贴出来请大家指教。
#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
int k;
cin>>k;
double a;
cin>>a;
vector<double> w(k);
double sum_w=0.0;
for(int i=0;i<k;i++)
{
cin>>w[i];
sum_w+=w[i];
}
vector<double> x(k);
double max_output=1.0;
for(int i=0;i<k;i++)
{
x[i]=w[i]/sum_w*a;
max_output*=pow(x[i],w[i]);
}
cout<<setiosflags(ios::fixed)<<setprecision(5)<<log(max_output)<<endl;
for(int i=0;i<k;i++)
cout<<setiosflags(ios::fixed)<<setprecision(5)<<x[i]<<' ';
cout<<endl;
}
这题很简单,当xi的分布与wi分布相同时,输出的威力是最大的。 简言之,对给定的求得威力的公式取对数,即可发现结果是wi与log(xi)的卷积,等价于分布wi与分布xi的KL散度,当两个分布相同时,结果取极值。
连乘积很容易超数据类型范围,建议用对数求和运算修饰一下