您的位置:首页 > 其它

poj 1190 生日蛋糕 隐式图搜索

2014-03-29 14:36 561 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: