贪心:
已知 (x+u)^a * y^b > x^a * (y+u)^b
证明 (x+u)^a * (y+t)^b > x^a * (y+t+u)^b
由于 ((x+u)/x)^a > ((y+u)/(y))^b > ((y+t+u)/(y+t))^b
得证
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
int n,k;
int a[11],b[11];
double f()
{
double tem=1;
for(int i=0;i<k;i++) tem*=pow(a[i],1.0/b[i]);
return tem;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=0;i<k;i++) scanf("%d",&a[i]);
for(int i=0;i<k;i++) scanf("%d",&b[i]);
for(int i=0;i<n;i++){
double ans=-1;
int id=-1;
for(int j=0;j<k;j++)
{
a[j]++;
double tem=f();
if(ans<tem) ans=tem,id=j;
a[j]--;
}
a[id]++;
}
printf("%f\n",f());
}