蒟蒻求助
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m,minv[30],mins[30],a,b,y=99999,maxh;
inline int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
void search(int d,int v,int s,int r,int h){
if(v<minv[d-1]||s+mins[d-1]>=y||v/r*2+s>=y)
return;
if(d==0){
if(v==0)
y=min(y,s);
return;
}
for(a=r-1;a>=d;a--){
maxh=min(h-1,(v-minv[d-1])/(a*a));
for(b=maxh;b>=d;b--){
if(d==m)
search(d-1,v-a*a*b,s+a*a+2*a*b,a,b);
else
search(d-1,v-a*a*b,s+2*a*b,a,b);
}
}
}
int main(){
n=read();
m=read();
for(a=1;a<=m;a++){
minv[a]=minv[a-1]+a*a*a;
mins[a]=mins[a-1]+2*a*a;
}
search(m,n,0,sqrt(n/m),n/(m*m));
cout<<y;
return 0;
}