美文网首页
图论小结(三)-剪

图论小结(三)-剪

作者: 御史神风 | 来源:发表于2018-08-17 23:41 被阅读0次
BFS 优化:

双向BFS注意点:

  1. 每轮遍历整层;
  2. 每轮选取已搜索点数少的一边搜一层;
DFS 优化:

剪枝
这里以洛谷的p1731生日蛋糕为例
题目背景
7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri, 高度为Hi的圆柱。当i<M时,要求Ri>Ri+1, R i>Ri+1; Hi>Hi+1,
i>Hi+1
由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。令Q= Sπ
请编程对给出的N和M,找出蛋糕的制作方案(适当的Ri和Hi的值),使S最小。(除Q外,以上所有数据皆为正整数)
数据
N(N<=20000),表示待制作的蛋糕的体积为Nπ;M(M<=15),表示蛋糕的层数为M。
时空限制:1000ms / 128MB
DFS方式
l:当前层数
r:当前半径(最大等于体积的平方根)
h:当前高度(最大等于体积)
rv:当前剩余体积
ts:当前总侧面积
初始:dfs(0, n^0.5, n, n, 0);

void dfs(int l, int r, int h, int rv, int ts)
{
  loop()
  {
    // 剪枝
    dfs(l+1, r-1, h-1, rv-nowV, ts+nowV);
  }
}

剪枝策略

  1. 当前面积+剩余层数最小面积 > 最优解,剪
  2. 当前体积 < 剩余层数最小体积,剪
  3. 当前体积 > 剩余层数最大体积,剪

剩余层数最小面积与剩余的层数有关,而同一层数会重复使用,所以可以考虑开个数组,预处理一下。而层数最多只有15层,15个状态,果断预处理;
剩余层数最小面积也只与剩余层数有关,同理也会重复使用,预处理;
剩余层数最大体积与剩余层数、当前半径、高度都有关,状态数量最多有15x141x20‘000,如果开个int数组需要超过160Mb空间,暴空间了。这里有个问题,就是经过前两种剪枝后,加上条件限制,我们对这个数组的使用是很稀疏的,所以完全没有必要预处理,只需要在dfs中计算就好。

相关文章

  • 图论小结(三)-剪

    BFS 优化: 双向BFS注意点: 每轮遍历整层; 每轮选取已搜索点数少的一边搜一层; DFS 优化: 剪枝这里以...

  • 图论小结

    图的存储 邻接矩阵 邻接表 图的遍历 DFS(双向DFS) BFS(剪枝) 单源最短路径算法 dij 条件:无负权...

  • 图论小结(二)

    路径 欧拉路径性质:不重复边,遍历所有边条件:无向图中,没有度数为奇数的点,或只有两个度数为奇数的点(一个起点一个...

  • <<数学之美>> part5

    摘要: [图论] [网络爬虫] [图的遍历] 图论 说到图论,必须要提的就是KonigsBerg七桥问题,简单说就...

  • 《宇宙猜想》目录

    廿八学会 - 《宇宙图论》只是想将一切看得更清晰些(微信公众号:宇宙猜想) 《宇宙图论》目录 大目录 一、宇宙图论...

  • 《数学之美》笔记 图论与网络爬虫

    离散数学包括数理逻辑,集合论,图论,近世代数。 图论 哥尼斯堡七桥问题(图论的起源):只有每个点的度都是偶数的情况...

  • 美团 EasyReact 源码剖析:图论与响应式编程

    美团 EasyReact 源码剖析:图论与响应式编程 美团 EasyReact 源码剖析:图论与响应式编程

  • 2020-04-03

    一起学习图论 ​最近在学习图论,所以打算写一下图论的浅显概念。 一、起源 普瑞格尔河从古城哥尼斯堡市中心流过,河上...

  • 图论之图的存储表示

    前几天在写了两篇介绍运筹学的文章,在简友@三余寻真的提示之下,决定从今天开始,把关于图论的问题详细介绍一下。 图论...

  • 计划

    docker源码 sdn openflow 图论

网友评论

      本文标题:图论小结(三)-剪

      本文链接:https://www.haomeiwen.com/subject/kbkxiftx.html