#include<iostream>
using namespace std;
int minn_v[105];
int dp[100005][16][16][16];
int dfs(int v,int layer,int lh,int lr)
{
// cout<<"i";
if(dp[v][layer][lh][lr]>0)
{
return dp[v][layer][lh][lr];
}
int minn=999999999;
if(layer==1)
{
for(int r=1;r<lr;r++)
{
if(v%(r*r)==0&&v/(r*r)<lh)
{
minn=min(minn,2*r*(v/(r*r)));
}
}
dp[v][layer][lh][lr]=minn;
return minn;
}
for(int r=layer;r<lr&&v>=(r*r);r++)//
{
for(int h=layer;h<lh&&v-h*r*r>=minn_v[layer-1];h++)//
{
minn=min(dfs(v-h*r*r,layer-1,h,r)+2*r*h,minn);
}
}
dp[v][layer][lh][lr]=minn;
return minn;
}
int main()
{
int n,m,minns=999999999;
cin>>n>>m;
if(m==1)
{
for(int r=1;n/(r*r)>=1;r++)
{
if(n%(r*r)==0)
{
int h=n/(r*r);
minns=min(minns,r*r+2*r*h);
}
}
cout<<minns;
return 0;
}
for(int i=1;i<=m;i++)
{
int r=i,h=i;
minn_v[i]=minn_v[i-1]+r*r*h;
}
for(int r=m;n>=(r*r);r++)
{
for(int h=m;n-h*r*r>=minn_v[m-1];h++)
{
minns=min(minns, dfs(n-h*r*r,m-1,h,r) + r*r + 2*r*h);
}
}
cout<<minns;
return 0;
}
现在是wa,tle先不管。。。