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

本文共 1631 字,大约阅读时间需要 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 1000000000int 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/

    你可能感兴趣的文章
    python转换已转义的字符串
    查看>>
    Python Sphinx自动摘要:成员函数的自动列表
    查看>>
    Python SQL和NoSQL数据库操作实战
    查看>>
    python stdout flush_sys.stdout.flush()方法的用法
    查看>>
    python string 运算
    查看>>
    Python str与bytes之间的转换
    查看>>
    Python subprocess ffmpeg
    查看>>
    python subprocess Permission denied Errno 13
    查看>>
    Python subprocess.call - 将变量添加到 subprocess.call
    查看>>
    Python Subprocess.Popen 从一个线程
    查看>>
    Python subprocess.Popen 作为 Windows 上的不同用户
    查看>>
    Python转换PPT为PDF
    查看>>
    Python subprocess.Popen() 等待完成
    查看>>
    Python sum 二维列表中具有相同第一个值的元素
    查看>>
    Python Sympy模块NoConversion:收敛到根失败;请尝试n<;15或MaxSteps>;50
    查看>>
    Python sys.MODULES包含尚未导入的模块
    查看>>
    python sys模块使用
    查看>>
    Python tarfile、zipfile解压模块讲解
    查看>>
    python tcp server传输成功之后进行删除_python学习之路(三)使用socketserver进行ftp断点续传...
    查看>>
    python车牌识别系统+车辆管理+计费系统(图像识别)django框架 计算机毕业设计
    查看>>