代码求助,不知道为啥错了
查看原帖
代码求助,不知道为啥错了
229801
az__eg楼主2022/7/9 18:19
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long long T;
long long k;
long long p[101],aa[101];
long long V=1;
long long amx;
long long ansa,ansb,ansc;
long long ans = 1145141919810;
long long a,b,c;
long long bmx;
void bfs(int dep,long long sum);
void dfs(int dep,long long sum);
int main()
{
	scanf("%d",&T);
	long long i,j;
	while(T--)
	{
		ansa = 0;
		ansb = 0;
		ansc = 0;
		ans = 9000000000000000000;
		scanf("%lld",&k);
		V=1;
		for(i=1;i<=k;i++)
		{
			scanf("%lld%lld",&p[i],&aa[i]);
			for(j=1;j<=aa[i];j++)
			{
				V*=p[i];
			}
		}
		for(i=1;i<=V;i++)
		{
			if((i-1)*(i-1)*(i-1)<=V&&i*i*i>=V)
			{
				amx = i+1;
				break;
			}
		}
		dfs(1,1);
		printf("%lld %lld %lld %lld\n",ans*2ll,ansa,ansb,ansc);
	}
	
}
void bfs(int dep,long long sum)
{
	if(sum>bmx)
	{
		return;
	}
	else if(dep>k)
	{
		if(sum<a)
		{
			return;
		}
		b = sum,c = V/a/b;
		if(a*b+b*c+a*c<ans)
		{
			ans = a*b+b*c+a*c;
			ansa = a;
			ansb = b;
			ansc = c;
		}
		return;
	}
	if(aa[dep]>=1)
	{
		aa[dep]-=1;
		bfs(dep,sum*p[dep]);
		aa[dep]+=1;
	}
	bfs(dep+1,sum);
}
void dfs(int dep,long long sum)
{
	if(sum>amx)
	{
		return;
	}
	else if(dep>k)
	{
		a = sum;
		if(V/a + 2*a*sqrt(V/a) < ans)
		{
			bmx = (long long)(sqrt(V/a))+1ll;
			bfs(1,1);
		}
		return;
	}
	if(aa[dep]>=1)
	{
		aa[dep]-=1;
		dfs(dep,sum*p[dep]);
		aa[dep]+=1;
	}
	dfs(dep+1,sum);
}

不知道为啥错了,求大佬帮忙

2022/7/9 18:19
加载中...