爆搜emm
代码
//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,ans=1e9+7;
int S[25],V[25];
void dfs(int x,int s,int v,int r,int h)
{
if (!x)
{
if (v==n) ans=min(ans,s);
return ;
}
if (s+S[x]>ans||v+V[x]>n) return;
if ((2*(n-v)/r+s)>=ans) return;
for (int i=r-1;i>=x;i--)
{
if (x==m) s=i*i;
int mh=min((n-V[x-1]-v)/(i*i),h-1);
for (int k=mh;k>=x;k--) dfs(x-1,s+i*k*2,v+i*i*k,i,k);
}
return ;
}
signed main()
{
for (int i=1;i<=21;i++)
S[i]=S[i-1]+i*i*2,V[i]=V[i-1]+i*i*i;
cin>>n>>m;
dfs(m,0,0,100,10000);
if (ans==1e9+7) puts("");
else cout<<ans;
return 0;
}