因为修改了很多次,码风已经不成样子了,答案没有错但超时了,希望大佬救我一命
#include<bits/stdc++.h>
using namespace std;
int ans=0x3f3f3f3f;
int n,m;
int ads;//增加的表面积
int adv;//增加的体积
void dfs(int h,int r,int s,int v,int dep) //从上往下深度优先搜索
{
if(s>=ans)
{
return;
}
if(dep==m)
{
if(v==n) ans=min(ans,s);
return;
}
if(v>=n)
{
return;
}
for(int i=m-dep;i<=h-1;i++)
{
for(int j=m-dep;j<=r-1;j++)
{
ads=2*i*j;
if(dep==0)
{
ads+=j*j;
}
if(s+ads>=ans)
{
break;
}
adv=i*j*j;
if(v>n)
{
break;
}
dfs(i,j,s+ads,v+adv,dep+1);
}
}
}
signed main()
{
scanf("%d%d",&n,&m);
dfs(n,sqrt(n),0,0,0);
printf("%d",ans);
}