栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1190 生日蛋糕

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1190 生日蛋糕

#include <cstdio>#include <algorithm>#include <cmath>using namespace std;#define MAX_LAYER_NUM 25#define INF 0x3f3f3f3fint layer_num;int total_volume;int min_vol[MAX_LAYER_NUM];int min_area[MAX_LAYER_NUM];int ans;void init(){    min_area[0] = min_vol[0] = 0;    for (int i = 1; i <= 20; i++)    {        min_vol[i] = min_vol[i - 1] + i * i * i;        min_area[i] = min_area[i - 1] + 2 * i * i;    }}void DFS(int r_limit, int h_limit, int layer, int area, int volume){    if (layer == 0)    {        if (volume != total_volume) return;        ans = min(ans, area);        return;    }    if (total_volume - volume < min_vol[layer])        return;    if (ans - area < min_area[layer])        return;    if (layer < layer_num && area + 2 * (total_volume - volume) / r_limit > ans)        return;    for (int i = r_limit; i >= layer; i--)    {        if (layer == layer_num)        { area = i * i;        }        int max_h = (total_volume - min_vol[layer - 1] - volume) / (i * i);        for (int j = min(max_h, h_limit); j >= layer; j--)        { DFS(i - 1, j - 1, layer - 1, area + 2 * i * j, volume + i * i * j);        }    }}int main(){    scanf("%d%d", &total_volume, &layer_num);    ans = INF;    init();    DFS((int)sqrt(total_volume), total_volume, layer_num, 0, 0);    printf("%dn", ans);    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379106.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号