https://www.luogu.com.cn/problem/T148457
#include<bits/stdc++.h>
using namespace std;
int a[201],b[201],m,n,ans;
void dfs(int v,int s,int p,int r,int h){
if(p==0){
if(v==n&&s<ans){
ans = s;
}
return ;
}
if(r==0){
return ;
}
if(v+b[p-1]>n || s+a[p-1]>ans || 2*(n-v)/r+s>=ans){
return ;
}
else{
for(int i=r-1;i>=p;i--){
if(i==0){
continue;
}
if(p==m){
s = i*i;
}
int hh = min((n-v-b[p-1])/(i*i),h-1);
for(int j=hh;j>=p;j--){
dfs(v+i*i*j,s+2*i*j,p-1,i,j);
}
}
}
return ;
}
int main(){
cin>>n>>m;
if(m==0 || m==1){
cout<<-1<<endl;
return 0;
}
ans=2147483647;
a[0]=b[0]=0;
for(int i=1;i<201;i++){
a[i]=a[i-1]+2*i*i;
b[i]=b[i-1]+i*i*i;
}
dfs(0,0,m,n+1,n+1);
if(ans==2147483647){
cout<<-1<<endl;
return 0;
}
cout<<ans<<endl;
return 0;
}