题目

分析

代码
#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);
}