链接:

http://poj.org/problem?id=1190

思路:

剪枝。

1、从半径n+1开始

2、当前已有表面积,加上剩余的预估最小表面积,若大于最优解,减掉。(什么是预估最小解?高度每次减一,半径也每次减一就是了,这个可以求出来)

3、当前已有体积,加上剩余的预估最小体积,若大于最优解,减掉(同上)。

4、搜索途中,若体积超出限制,减掉

5.(目标体积-已有体积)/r*2+已有表面积>=ans,这个剪枝其实是把体积和面积预估合起来了,是说如果把剩下的所有体积,全部用来只做成一个圆柱体,这种情况加所增加到表面积是最小的。 为啥呢?因为此时是以r为底算的,底盘最大,高度最低,简单点说,你觉得相同体积下,是个瘦高的侧面积大,还是矮胖的大?

推导公式:

2*r*h=Sr*r*h=V=> V*2/r = SS + sumS >= best => return;

题解:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 30;
int ms[maxn],mv[maxn];
int ans;
int n,m;//体积和层数
void dfs(int summ,int v,int dep,int h,int r)//当前总面积,当前体积,剩余层数,剩余高度,当前半径
{if(v>n)return;if(!dep){if(v==n && summ<ans) ans = summ;return;}if(v+mv[dep]>n||summ+ms[dep]>ans||(n-v)/r*2+summ>=ans) return;for(int i=r-1;i>=dep;i--)//枚举半径{if(dep==m)summ=i*i;int maxh=min((n-v-mv[dep-1])/(i*i),h-1);//剩余部分在该层的最大高度for(int j=maxh;j>=dep;j--)dfs(summ+2*i*j,v+i*i*j,dep-1,j,i);}return;
}
void init()
{for(int i=1;i<=20;i++){ms[i]=ms[i-1]+i*i*2;mv[i]=mv[i-1]+i*i*i;}return ;
}
int main()
{init();int i,j;cin>>n>>m;ans = 1e9;dfs(0,0,m,n+1,n+1);//注意从n+1开始的if(ans == 1e9)ans=0;cout<<ans<<endl;return 0;
}

POJ - 1190 - 生日蛋糕 (深搜剪枝)相关推荐

  1. poj 1190 生日蛋糕

    poj 1190 生日蛋糕 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17460 Accepted: 6221 Descri ...

  2. NOI 4.5 动态规划 4979:海贼王之伟大航路(深搜剪枝)

    题目来源:http://noi.openjudge.cn/ch0405/4979/ 4979:海贼王之伟大航路 总时间限制: 1000ms 内存限制: 65536kB 描述 "我是要成为海贼 ...

  3. Python+PyQt5实现五子棋游戏(人机博弈+深搜+α-β剪枝)

    Python+PyQt5实现五子棋游戏(人机博弈+深搜+α-β剪枝) 一.问题描述 1.五子棋 五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏. 五子棋的棋具与围棋通用,是一种传 ...

  4. 一本通例题-生日蛋糕——题解超强深搜剪枝,从无限到有限

    题目传送 显然是道深搜题.由于蛋糕上表面在最底层的半径确认后就确认了,所以搜索时的面积着重看侧面积. 找维度/搜索面临状态/对象:当前体积v,当前外表面面积s,各层的半径r[],各层的高度h[]. 可 ...

  5. POJ-1724 深搜剪枝

    这道题目如果数据很小的话.我们通过这个dfs就可以完成深搜: void dfs(int s) {if (s==N){minLen=min(minLen,totalLen);return ;}for ( ...

  6. hdu 3812 Sea Sky 深搜+剪枝

    题目意思: 从sea 找一条道sky 的最长路 题解: 先进行一系列的预处理 1.将所有不重复的字符串先保留下来,然后从小到大排序,这样深搜的时候最先弄出来的答案就是最小的 字母序. 2. 进行深度优 ...

  7. poj 1950 Dessert 深搜

    题意: 给n,问有多少和由1,2...n,和'+','-','.'(表示连接,4.5表示45)组成,值为0的表达式. 分析: 深搜,因为要枚举到"连接"的情况,所以传送pre表示上 ...

  8. ACM 海贼王之伟大航路(深搜剪枝)

    "我是要成为海贼王的男人!" 路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿着"唯一的大秘宝"--ONE PIECE).而航程中间,则是各式各样的 ...

  9. LeetCode 1240. 铺瓷砖(深搜剪枝)

    1240. 铺瓷砖 你是一位施工队的工长,根据设计师的要求准备为一套设计风格独特的房子进行室内装修. 房子的客厅大小为 n x m,为保持极简的风格,需要使用尽可能少的 正方形 瓷砖来铺盖地面. 假设 ...

  10. POJ2044 深搜+剪枝(云彩下雨)

    题意:        有一个城镇,是4*4的大小的,然后你控制一块云彩,2*2的,你每天可以有9种走的方法,上下左右,或者不动,走的时候可以走1或者2步,云彩所在的地方肯定会下雨,然后给你做多365天 ...

最新文章

  1. 【Git】Git 版本管理 ( 补充提交版本 git commit --amend | 版本库提取文件 git checkout -- filename | 删除文件 git rm )
  2. SAP License审计说明及合并
  3. php模拟socket一次连接,多次发送数据的实现
  4. Tomcat部署项目的几种常见方式
  5. nowcoder 清楚姐姐的翅膀们 F 一般图的最大匹配
  6. Leetcode 565. Array Nesting
  7. win10+vscode部署java开发环境
  8. Scala与Java混编译:java日志不打印的问题
  9. Ubuntu 16.04扩展swap分区(内存)
  10. const修饰指针的情况分析
  11. Linux将数据从小存储通过FTP发送到大存储中
  12. c语言windows程序设计pdf下载,windows程序设计第7版(windows程序设计第7版珍藏版) pdf...
  13. C4D怎么快速建模桌布? c4d创建桌布的教程
  14. 数据中心IDC产业研究报告:碳中和背景下,IDC产业链的破局之路
  15. 相见恨晚,真的很喜欢Udacity
  16. 【CVPR2022论文阅读】Learning Affinity from Attention(待更新)
  17. 微信上传图片接口,下载接口到本地
  18. 计算机视觉不规则roi原理,C++ 中利用 Opencv 得到不规则的ROI 区域(已知不规则区域)...
  19. Debian(Linux) 安装Windows通用字体(可解决TimesNewRoman等字体的报错)
  20. 清除 DNS 缓存( 附全平台详细教程 )

热门文章

  1. TZOJ 3315 买火车票(线段树区间最小值)
  2. 利用matlab实现三体问题(双星、3星、多星运动)
  3. 基于Python,OpenCV,Numpy和Albumentations实现目标检测的合成数据集
  4. openlayer 画圆Circle实际半径解决方案
  5. 农业信息化让农民“心明眼亮”
  6. 【联邦学习】联邦学习量化——non-iid数据集下的仿真
  7. 0.1- 机械加工工艺-----切削加工基础
  8. 浅谈angular的作用
  9. 谷歌气球 simplekml 入门klm解说《六》
  10. 使用PE启动U盘安装pfSense