题目链接:

这个题目非常好,有难度;能够好好的多做做;

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<queue>
#include<map>
#include<cmath>
#include<stack>
#include<set>
#include<vector>
#include<algorithm>
#define LL long long
using namespace std;
int MinArea=1<<30; // 存最优表面积。
int MinV[30]; // 存第一层到该层最小体积;
int MinA[30]; // 存第一层到该层最小面积。
int N,M; // 体积,层数。
int area=0; // 存增在搭建的表面积;
int MaxV(int n,int r,int h) // 当有n层时。能够有的最大体积;当中r为最大半径,h为最大高度;
{
int v=0;
for(int i=0;i<n;i++) v+=(r-i)*(r-i)*(h-i);
return v;
}
void dfs(int v,int n,int r,int h)
{
if(n==0){ // 说明一种情况搭建层数已经完毕。
if(v) return;
else{
MinArea=min(MinArea,area); // 能够搭建,则更新最优解。
return;
}
}
if(v<=0) return; // 体积不够,退出。
if(MinV[n]>v) return; // 搭建n层的最小体积比提供的体积大。即无法搭建。退出;
if(area+MinA[n]>=MinArea) return; // 当前搭建表面积加上前n层最小的表面积比最优解更大。则能够退出。
if(h<n||r<n) return; // 最大半径,或者最大高度比层数还要多。则就说明已经无法继续搭建了。
if(MaxV(n,r,h)<v) return; // 这n层能够搭建的最大体积都比提供的体积要小,说明无法按要求搭建;
for(int rr=r;rr>=n;rr--){ // 从最大半径開始枚举搜索。
if(n==M) area=rr*rr; // 底面积;
for(int hh=h;hh>=n;hh--){ // 从最大高度開始枚举。
area+=2*rr*hh; // 搭建的面积更新;
dfs(v-rr*rr*hh,n-1,rr-1,hh-1);
area-=2*rr*hh; // 回溯;
}
}
}
int main()
{
while(~scanf("%d%d",&N,&M)){
MinV[0]=0;
MinA[0]=0;
for(int i=1;i<=M;i++){
MinV[i]=MinV[i-1]+i*i*i; // 前i层最小体积;
MinA[i]=MinA[i-1]+2*i*i; // 前i层最小面积;
}
if(MinV[M]>N) printf("0\n");
else{
int MaxH=(N-MinV[M-1])/(M*M)+1; // 底层最大高度。
int MaxR=sqrt(double(N-MinV[M-1])/M)+1; // 底层最大半径;
int area=0;
MinArea=1<<30;
dfs(N,M,MaxH,MaxR);
if(MinArea==1<<30) printf("0\n");
else printf("%d\n",MinArea);
}
}
return 0;
}

POJ-1190-生日蛋糕-DFS(深搜)-枚举-多重剪枝的更多相关文章

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

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

  2. POJ 2676 数独+dfs深搜

    数独 #include "cstdio" #include "cstring" #include "cstdlib" #include &q ...

  3. DFS 深搜专题 入门典例 -- 凌宸1642

    DFS 深搜专题 入门典例 -- 凌宸1642 深度优先搜索 是一种 枚举所有完整路径以遍历所有情况的搜索方法 ,使用 递归 可以很好的实现 深度优先搜索. 1 最大价值 题目描述 ​ 有 n 件物品 ...

  4. CodeM美团点评编程大赛初赛B轮 黑白树【DFS深搜+暴力】

    [编程题] 黑白树 时间限制:1秒 空间限制:32768K 一棵n个点的有根树,1号点为根,相邻的两个节点之间的距离为1.树上每个节点i对应一个值k[i].每个点都有一个颜色,初始的时候所有点都是白色 ...

  5. poj 2386:Lake Counting(简单DFS深搜)

    Lake Counting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18201   Accepted: 9192 De ...

  6. poj1190 生日蛋糕(深搜+剪枝)

    题目链接:poj1190 生日蛋糕 解题思路: 深搜,枚举:每一层可能的高度和半径 确定搜索范围:底层蛋糕的最大可能半径和最大可能高度 搜索顺序:从底层往上搭蛋糕,在同一层尝试时,半径和高度都是从大到 ...

  7. 【DFS深搜初步】HDOJ-2952 Counting Sheep、NYOJ-27 水池数目

    [题目链接:HDOJ-2952] Counting Sheep Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  8. USACO 2.3.3 Zero Sum 和为零(深搜枚举)

    Description 请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N. 现在请在数列中插入“+”表示加,或者“-”表示减,抑或是“ ”表示空白,来将 ...

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

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

随机推荐

  1. selenium webdriver——元素定位

    元素定位: >>WebDriver提供了八种元素定位方法,在Python语言中,所对应的方法如下: >>id属性定位:有唯一性 find_element_by_id(" ...

  2. 【转】Netty系列之Netty编解码框架分析

    http://www.infoq.com/cn/articles/netty-codec-framework-analyse/ 1. 背景 1.1. 编解码技术 通常我们也习惯将编码(Encode)称 ...

  3. BZOJ3260 跳 【组合数】

    题目 邪教喜欢在各种各样空间内跳.现在,邪教来到了一个二维平面. 在这个平面内,如果邪教当前跳到了(x,y),那么他下一步可以选择跳到以下4个点: (x-1,y),(x+1,y),(x,y-1),(x ...

  4. bzoj2338数矩形(rectangle)

    数矩形(rectangle) 计算几何 把所有点两两连线,把这些线按长度排序,再按中点排序 能组成矩形的线一定是连续的 最坏就是所有点围成一个圆,交于圆心 复杂度O(可以过) 要用叉积,不然会被卡精 ...

  5. 刷题总结——Collecting Bugs(poj2096)

    题目: Description Ivan is fond of collecting. Unlike other people who collect post stamps, coins or ot ...

  6. service中显示一个dialog

    dialog是依附于activity存在的.但是app中经常需要使用以下的情况,在service中做一些后台操作,在某个临界条件满足时,显示一个dialog告知用户.这时dialog无法直接从serv ...

  7. 【03】node 之 作用域

    1.什么是作用域 作用域:规定了一个变量和函数可使用的范围,作用域分为两种:全局作用域.局部作用域(函数作用域) 2.NodeJS作用域 NodeJs中一个文件就是一个模块,模块中使用var定义的变量 ...

  8. 通过 jsp+ajax+servlet+webservice 远程访问天气预报服务

    通过 jsp+ajax+servlet+webservice 远程访问天气预报服务   - webservice 客户端访问的方式     1. java代码来访问     2. ajax 方式异步加 ...

  9. jsp和java获取文件或路径

    1.如何获得当前文件路径常用:(1).Test.class.getResource("")得到的是当前类FileTest.class文件的URI目录.不包括自己!(2).Test. ...

  10. android中与Adapter相关的控件----Spinner&AutoCompleteTextView

    Spinner(列表选项框) & AutoCompleteTextView(自动完成文本框) 一.列表选项框核心属性 android:dropDownHorizontalOffset设置列表框 ...