题目地址:http://poj.org/problem?id=1190

一道很有趣的搜索题……主要是剪枝……

我弄了5个剪枝:

1.当前剩余层数>=上层半径,剪掉

2.当前剩余层数>=上层高度,剪掉

3.体积<1,剪掉

4.体积<当前可能的最小体积(我用等差数列求和公式算的……也不知道对不对)

5.神奇剪枝网上看的,当前(剩余体积*2)/上层半径+当前表面积总和>当前搜出的最优解,剪掉

代码很简单,20行

 1 #include <iostream>
2 #include <cmath>
3 #include <climits>
4 #define pow2(k) k*k
5 #define v(r,h) pow2(r)*h
6 #define min(a,b) a<b?a:b
7 using namespace std;
8 int n,m,s=INT_MAX,beg;
9 void dfs(int r,int h,int c,int lv,int ans)
10 {
11 if(c>m){if(!lv)s=min(s,ans);return;}if(r<=m-c+1||h<=m-c+1||ans+lv*2/r>s||lv<1||lv<(m-c+2)*(m-c+1)/2)return;
12 for(int i=r-1;i>0;i--)for(int j=1;j<h&&v(i,j)<=lv;j++)dfs(i,j,c+1,lv-v(i,j),ans+2*i*j);
13 }
14 int main()
15 {
16 ios::sync_with_stdio(0);
17 cin>>n>>m,beg=sqrt(n)+1;
18 for(int i=beg;i>=1;i--)for(int j=1;v(i,j)<=n;j++)dfs(i,j,2,n-v(i,j),pow2(i)+2*i*j);
19 cout<<(s==INT_MAX?0:s);
20 return 0;
21 }

POJ 1190 生日蛋糕题解的更多相关文章

  1. POJ 1190 生日蛋糕 【DFS + 极限剪枝】

    题目传送门:http://poj.org/problem?id=1190 参考剪枝:https://blog.csdn.net/nvfumayx/article/details/6653111 生日蛋 ...

  2. Codevs 1710 == POJ 1190 生日蛋糕 == 洛谷P1731

    生日蛋糕 时间限制: 2 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ ...

  3. POJ 1190 生日蛋糕(DFS)

    生日蛋糕 Time Limit: 1000MSMemory Limit: 10000KB64bit IO Format: %I64d & %I64u Submit Status Descrip ...

  4. poj 1190 生日蛋糕 , 强剪枝

    题意: 制作一个体积为Nπ(N<=10000)的M(M<=20)层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆 ...

  5. POJ 1190 生日蛋糕 剪枝

    Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri ...

  6. 洛谷 P1731 [NOI1999]生日蛋糕 && POJ 1190 生日蛋糕

    题目传送门(洛谷)  OR 题目传送门(POJ) 解题思路: 一道搜索题,暴力思路比较容易想出来,但是这道题不剪枝肯定会TLE.所以这道题难点在于如何剪枝. 1.如果当前状态答案已经比我们以前某个状态 ...

  7. poj 1190 生日蛋糕

    中文题 题目分析 搜索题,非常好的剪枝 由于深度一定(m),所以使用深度优先搜索,自上而下的设定蛋糕序号,最顶层的为第1层,……,最底层的蛋糕为第m层,很明显满足题目条件的前i层的(从顶层(也就是编号 ...

  8. POJ - 1190 生日蛋糕 dfs+剪枝

    思路:说一下最重要的剪枝,如果当前已经使用了v的体积,为了让剩下的表面积最小,最好的办法就是让R尽量大,因为V = πR 2H,A' = 2πRH,A' = V / R * 2 ,最大的R一定是取当前 ...

  9. poj 1190 DFS 不等式放缩进行剪枝

    F - (例题)不等式放缩 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submi ...

随机推荐

  1. Eureka中读写锁的奇思妙想,学废了吗?

    前言 很抱歉 好久没有更新文章了,最近的一篇原创还是在去年十月份,这个号确实荒废了好久,感激那些没有把我取消关注的小伙伴. 有读者朋友经常私信问我: "你号卖了?" "文 ...

  2. ABP Framework 研习社经验总结(6.28-7.2)

    ABP Framework 研习社经验总结(6.28-7.2) 研习社初衷 在翻译 <实现领域驱动设计>-- 基于 ABP Framework 实现领域驱动设计实用指南 时,因为DDD理论 ...

  3. Linux mlocate源码分析:updatedb

    在Linux的文件查找命令中,mlocate提供的locate命令在单纯进行路径名名查找时有着显著的效率优势,因为mlocate预先对磁盘文件进行扫描并存储到一个数据库文件中,查找时只需要检索数据库而 ...

  4. Swagger/OpenAPI By Swashbuckle在NetCore 3.1中较NetCore 2.2使用的注意事项及入门

    方案选择 使用Web API时,了解其各种方法对开发人员来说可能是一项挑战. Swagger也称为OpenAPI(Open Application Programming Interface,开放应用 ...

  5. 24、Keepalived高可用介绍

    24.1.什么是keepalived: Keepalived 软件起初是专为 LVS 负载均衡软件设计的,用来管理并监控 LVS 集群系统中各个服务节点的状态,后来又加入了可以实现高可用的 VRRP ...

  6. 附加数据库出现 无法打开物理文件 操作系统错误 5:拒绝访问 SQL

    刚刚从公司的电脑上考到自己刚刚装好系统的笔记本上面,出现了问题: 无法打开物理文件 操作系统错误 5:拒绝访问 . 网上找了下解决方法: 找到需要导入的  mdf和ldf  修改它的权限为完全控制,不 ...

  7. json串向后台传递数值自动四舍五入的问题

    业务需求:传递前台输入的数据,数量要求是小数点(多条数据) 后台服务是使用asp.net写的. 问题:反序列化JSON时总是自动四舍五入. 原因:JSON反序列化的时候数据类型是以第一条数据的类型为准 ...

  8. Octal Fractions java秒 C++

    Octal Fractions 题目抽象:   将八进制小数转换成十进制小树.小数的为数很大. 可以用java  中的BigDeciaml 秒掉.  time:297ms 1 import java. ...

  9. 用阻塞队列实现一个生产者消费者模型?synchronized和lock有什么区别?

    多线程当中的阻塞队列 主要实现类有 ArrayBlockingQueue是一个基于数组结构的有界阻塞队列,此队列按FIFO原则对元素进行排序 LinkedBlockingQueue是一个基于链表结构的 ...

  10. Spring:Spring事务手动回滚方式

    方法1: 在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句 ...