题目地址: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. 玩转STM32MP157- 使用 u8g2 驱动 OLED 12864(SSD1306)

    环境 硬件环境:STM32MP157C-DK2 软件: MPU上使用ST官方提供的STM32MP15x OpenSTLinux Starter Package 编译系统:Ubuntu 1604 64b ...

  2. 手摸手,带你用Beego撸商城系列一(基础篇)

    完整项目地址: go-shop-b2c 系列文章: 手摸手,带你用 Beego撸商城 系列一(基础篇) 手摸手,带你用 Beego撸商城 系列二(登录篇) 手摸手,带你用 Beego撸商城 系列三(系 ...

  3. 1、linux集群服务器规划

  4. CentOS-Docker安装Redis(单点)

    下载镜像 $ docker pull redis 创建目录 $ mkdir -p /usr/redis/data 运行镜像 $ docker run --restart=unless-stopped ...

  5. Java:Java控制台输出保存进文件

    前言 实现在控制台输出.并且把输出保存进文件 实现 您要在两个流中写入数据,请尝试使用OutputStream中的TeeOutputStream对象. 一.在maven的pom文件中引入jar包. & ...

  6. 简单学习java内存马

    看了雷石的内存马深入浅出,就心血来潮看了看,由于本人java贼菜就不介绍原理了,本文有关知识都贴链接吧 前置知识 本次主要看的是tomcat的内存马,所以前置知识有下列 1.tomcat结构,tomc ...

  7. 懂得分享 Linux 配置NFS共享服务

    部署YUM仓库及NFS共享服务一.YUM概述    YUM (Yellow dog Updater Modified)二.准备安装源    ① 软件仓库的提供方式    ② RPM软件包的来源    ...

  8. WSL2:在Windows系统中开发Linux程序的又一神器

    作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...

  9. python numpy高效体现

    import numpy as np import time def python_sum(n): a=[i**2 for i in range(n)] b=[i**3 for i in range( ...

  10. [刘阳Java]_酷炫视频播放器制作_JS篇

    此文章是接着上次写的<酷炫视频播放器制作_界面篇>将其完善,我们主要给大家介绍一下如何利用JS脚本来控制视频的播放.为了让大家能够保持对要完成的功能有直接的了解,我们还是将效果图附到文章里 ...