题目

分析

代码
#include <bits/stdc++.h>
using namespace std;
const int N = 24;
const int inf = 0x3f3f3f3f;
int mins[N], minv[N];
int R[N], H[N];
int n, m, ans = inf;
void dfs(int u, int v, int s)
{
if(v + minv[u] > n) return;
if(s + mins[u] >= ans) return;
if(s + 2 * (n - v) / R[u+1] >= ans) return;
if(!u)
{
if(v == n) ans = s;
return;
}
for(int r = min( R[u+1]-1, (int)sqrt((n - minv[u-1] - v) / u) ); r >= u; r--)
for(int h = min( H[u+1]-1, (n - minv[u-1] - v) / r / r); h >= u; h--)
{
R[u] = r, H[u] = h;
int t = u == m ? r * r : 0;
dfs(u-1, v + r*r*h, s + 2*r*h + t);
}
}
int main()
{
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; i++)
{
minv[i] = minv[i-1] + i * i * i;
mins[i] = mins[i-1] + 2 * i * i;
}
R[m+1] = H[m+1] = inf;
dfs(m, 0, 0);
if(ans > inf / 2) ans = 0;
printf("%d", ans);
}