#include <stdio.h>
#include <math.h>
#define MIN(x, y) (x) < (y) ? (x) : (y)
#define maxn 21
#define INF 0x7fff
int bstv[maxn];
int bsts, m;
void dfs(int f, int bufs, int bufv, int r, int h){
if(f == 0){
if(bufv == 0 && bufs < bsts) bsts = bufs;
return;
}
if(bufv-bstv[f-1] < 0 || bufs >= bsts || bufs+2*bufv/r > bsts) return;
int i;
for(i = r-1; i >= f; --i){
if(f == m) bufs = i*i;
int j = MIN(h-1, (bufv-bstv[f-1])/(i*i));
for(; j >= f; --j) dfs(f-1, bufs+2*i*j, bufv-i*i*j, i, j);
}
}
int main()
{
int i, n;
scanf("%d%d", &n, &m);
bstv[0] = 0;
for(i = 1; i <= m; ++i)
bstv[i] = bstv[i-1] + i*i*i;
bsts = INF;
dfs(m, 0, n, (int)sqrt(n+1), n+1);
bsts == INF ? printf("0") : printf("%d", bsts);
return 0;
}
poj 1190 生日蛋糕 隐式图搜索
最新推荐文章于 2021-05-25 04:34:51 发布