博客
关于我
poj1190生日蛋糕
阅读量:793 次
发布时间:2023-03-03

本文共 1679 字,大约阅读时间需要 5 分钟。

为了找到最小的外表面面积S,我们需要确定每一层的半径R_i和高度H_i,使得:

  • 体积总和为Nπ
  • 每层的半径和高度满足递减关系(R_i > R_{i+1},H_i > H_{i+1})
  • 外表面积S最小
  • 我们可以使用动态规划的方法,逐层确定每一层的半径和高度,并通过剪枝技术优化搜索过程。

    具体来说,对于每一层i,我们尝试不同的半径和高度组合,并计算其体积和外表面积。通过递归搜索,我们可以找到满足条件的最优解。

    在代码实现中,我们可以使用递归函数来尝试不同的半径和高度组合,并使用剪枝技术来避免重复计算和优化性能。

    最终,我们可以通过递归函数返回最小的S值,或者返回0表示无解。

    以下是实现代码:

    #include 
    #include
    #include
    #define MAXN 1000000000
    int f, n, mins;
    int dfs(int m, int r, int h, int s, int v) {
    if (v > n) return 1;
    if (m == f) {
    if (v < n) return -1;
    if (v > n) return 1;
    if (mins > s) mins = s;
    return 0;
    }
    for (int i = r - 1; i >= f - m; --i) {
    if (i <= 0) continue;
    int temp = (n - v) / (i * i);
    if (temp < f) continue;
    for (int j = temp; j >= f - m; --j) {
    if (j <= 0) continue;
    if (j == h - 1 && i == r - 1) continue;
    if (dfs(m + 1, i, j, s + 2 * i * j, v + i * i * j) == -1) {
    return -1;
    }
    }
    }
    return 2;
    }
    int main() {
    while (scanf("%d %d", &n, &f) != EOF) {
    mins = MAXN;
    int a = sqrt((double)n);
    int k = 0;
    int v = 0;
    for (int i = a; i >= f; --i) {
    v = i * i;
    if (v > n) break;
    for (int j = n / v; j >= f; --j) {
    if (j > h) continue;
    int s = 2 * i * j;
    if (dfs(1, i, j, s, v) == -1) {
    continue;
    }
    }
    }
    if (mins != MAXN) {
    printf("%d\n", mins);
    } else {
    printf("0\n");
    }
    }
    return 0;
    }

    输出结果

    根据输入的N和M,程序会输出最小的S值。如果无解,输出0。

    转载地址:http://mbxfk.baihongyu.com/

    你可能感兴趣的文章
    poj 1125Stockbroker Grapevine(最短路)
    查看>>
    Qualitor processVariavel.php 未授权命令注入漏洞复现(CVE-2023-47253)
    查看>>
    poj 1151 (未完成) 扫描线 线段树 离散化
    查看>>
    POJ 1151 / HDU 1542 Atlantis 线段树求矩形面积并
    查看>>
    poj 1163 数塔
    查看>>
    POJ 1177 Picture(线段树:扫描线求轮廓周长)
    查看>>
    Qualitor checkAcesso.php 任意文件上传漏洞复现(CVE-2024-44849)
    查看>>
    POJ 1182 食物链(并查集拆点)
    查看>>
    POJ 1185 炮兵阵地 (状态压缩DP)
    查看>>
    POJ 1195 Mobile phones
    查看>>
    POJ 1228 Grandpa's Estate (稳定凸包)
    查看>>
    poj 1236(强连通分量分解模板题)
    查看>>
    poj 1258 Agri-Net
    查看>>
    quagga 和 zebos
    查看>>
    poj 1286 Necklace of Beads
    查看>>
    POJ 1321 棋盘问题
    查看>>
    poj 1321(回溯)
    查看>>
    Qt高级——Qt元对象系统源码解析
    查看>>
    qt调用vs2008编写的dll动态库(隐式调用)
    查看>>
    Qt读取注册表默认值
    查看>>