#include<bits/stdc++.h>
#define N 127
#define eps 1e-6
using namespace std;
typedef long long LL;
LL t,w[N];
int n,c[N];
long long v=1,s=3e18;
long long A,B,C;
long long alpha(long long a){return 2*sqrt(a)*sqrt(v)+v/a;}
void dfs2(int p,LL a,LL b){
if((long double)b*b*a-eps>v) return;
if(p==n){
if(a*b+v/a+v/b<s) s=a*b+v/a+v/b,A=a,B=b,C=v/a/b;
return;
}
long long cm=1,sav=c[p];
for(int i=0;i<c[p];i++) cm*=w[p];
for(int i=c[p];i>=1;i--){
c[p]-=i;
dfs2(p+1,a,b*cm);
c[p]+=i;
cm/=w[p];
}
dfs2(p+1,a,b);
}
void dfs(int p,LL a){
if((long double)a*a*a-eps>v) return;
if(p==n){
if(alpha(a)<s) dfs2(0,a,1);
return;
}
long long cm=1;
for(int i=0;i<c[p];i++) cm*=w[p];
for(int i=c[p];i>=1;i--){
c[p]-=i;
dfs(p+1,a*cm);
c[p]+=i;
cm/=w[p];
}
dfs(p+1,a);
}
int main(){
scanf("%lld",&t);
while(t--){
v=1;s=3e18;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%lld%d",&w[i],&c[i]);
for(int j=0;j<c[i];j++) v*=w[i];
}
dfs(0,1);
printf("%lld %lld %lld %lld\n",2*s,A,B,C);
}
return 0;
}
codeforces 163D
最新推荐文章于 2022-02-07 15:47:46 发布