题意:
     让你制作一个蛋糕,这个蛋糕有m层,而且每层都是圆柱形,并且每一层都必须满足
ri>ri+1 && hi > hi+1,然后给出蛋糕的总体积是n*PI,还有层数m,让你构建一个蛋糕,使得这个蛋糕的总面积(没有底面)S*PI中的S最小,其中S,m,n,ri,hi都是整数(n<=10000,m<=20)。

思路:
      题意的最后一句话是突破口,就是所有的数据都是整数,这样我们可以考虑搜索,就是枚举每一层的r,h,下面来说一下剪枝,这个题目剪枝是关键
(1)r可以直接从sqrt(n)跑,h得从n跑 ,这个只是大致算的
(2)枚举的时候一定要注意,r,h下限不是1,而是剩余的层数+1,因为每层都至少-1
(3)对于每一个状态,求出当前状态的最大体积,如果小于n,那么直接return
(4)对于每一个状态,求出当前状态的最小体积,如果大于n,那么直接return
至于怎么求最大最小体积,要根据ri>ri+1&&hi>hi+1,自己去吧剩下的层数的r,h都构建出来求。别的没什么,题目比较简单,但是做着挺有感觉的。

#include<stdio.h>
#include<math.h>

int ansS ,m ,n;

bool jude(int nowi ,int r ,int h ,int v)
{
    int vv = v + r * r * h;
    for(int i = 1 ;i <= m - nowi  ;i ++)
    {
        vv += i * i * i;
        if(vv > n) return 0;
    }
    for(int i = nowi ;i <= m ;i ++)
    {
        v += r * r * h;
        r -- ,h --;
    }
    if(v < n) return 0;
    return 1;
}

void DFS(int nowi ,int R ,int H ,int nowv ,int nows)
{
    if(nowv > n || ansS && nows > ansS) return ;
    if(nowi == m + 1)
    {
        if(nowv == n)
        if(ansS == 0 || ansS > nows) ansS = nows;
        return ;
    }
    for(int i = R ;i > m - nowi ;i --)
    for(int j = H ;j > m - nowi ;j --)
    {
        int ts = nows + 2 * i * j + i * i;
        if(nowi != 1) ts -=  i * i;
        if(jude(nowi ,i ,j ,nowv))
        DFS(nowi + 1 ,i - 1 ,j - 1 ,nowv + i * i * j ,ts);
    }
    return;
}

int main ()
{
   scanf("%d %d" ,&n ,&m);
   ansS = 0;
   DFS(1 ,int(sqrt(n*1.0)) ,n ,0 ,0);
   printf("%d\n" ,ansS);
   return 0;
}

poj1190深搜 生日蛋糕相关推荐

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

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

  2. Go 分布式学习利器(15) -- Go 实现 深搜和广搜

    强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...

  3. 水管工游戏 (深搜)

    水管工游戏 本题依然是采用搜索,深搜,广搜都可以,本代码采用深搜,此题在搜索时需要增加一些判断条件以及下一步要搜索的位置即可. 代码如下: #include<stdio.h> int a[ ...

  4. Poj(2488),按照字典序深搜

    题目链接:http://poj.org/problem?id=2488 思路:按照一定的字典序深搜,当时我的想法是把所有的可行的路径都找出来,然后字典序排序. 后来,凡哥说可以在搜索路径的时候就按照字 ...

  5. [数据结构] 迷宫问题(栈和队列,深搜和广搜)

    代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...

  6. 迷宫问题最短捷径c语言深搜,迷宫问题 C语言实现(深搜)

    问题描述: 2015年05月21日 10:24:05 这是我自己出的一道题   其原型基于迷宫问题,用深搜来解决的!我就简单的说一说吧! 给定一个N * M 的迷宫!,1代表有障碍,0代表无障碍可通行 ...

  7. POJ-1724 深搜剪枝

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

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

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

  9. hdu4876 深搜+(随机枚举剪枝)

    题意:       给你n个数,让你从选择k个数,然后排成一个环(k个数的顺序随意,但是排成一个环后就不能变了),然后可以在这个环上任意的找连续w个数(w<=k),可以找多次,得到一个值等于当前 ...

最新文章

  1. Ubuntu系统安装搜狗输入法详细教程
  2. 轻量级实用PDF转换工具
  3. 【计算机网络】应用层 : 万维网 和 HTTP 协议 ( 万维网概述 | HTTP 协议特点 | HTTP 协议连接方式 | HTTP 协议报文结构 | HTTP 请求报文 | HTTP 响应报文 )
  4. python正则表达式知识点
  5. CoreAnimation —— CAReplicatorLayer(拷贝图层)
  6. 【Linux】快速搭建一个基于Vue的大型单页应用
  7. 动态新增表字段_制作动态的数据透视表(一):定义名称法创建数据透视表
  8. C#面向对象17 23种设计模式
  9. 小型英语字典(字典训练)
  10. usbcan、can分析仪、can卡的产品特点和功能特点
  11. 深入windows的关机消息截获-从XP到Win7的变化
  12. c#做一个身份信息查询系统
  13. 研究了四大计算机名校的培养方案,核心课程都在这了
  14. 雷军:《我十年的程序员生涯》系列之三:阳光灿烂的日子
  15. R语言中 attach()与detach(),及with()的使用
  16. 向爷爷介绍计算机,他折腾爷爷的计算机
  17. 【转自杨建荣博客】通过执行计划中的CONCATENATION分析sql问题
  18. 谈谈“数据库中间件”生态与发展
  19. 成功解决“谷歌浏览器打开是毒霸网址大全”问题,亲测有效(同样适用被hao123,或者2345浏览器篡改)
  20. maven 排除配置文件打包_maven 打包排除配置文件

热门文章

  1. 使用jquery.qrcode生成二维码(转)
  2. 步入DevExpress的使用(VS)
  3. 陶哲轩实分析 习题 10.3.5
  4. 生活中的算法---公交换乘
  5. 百度今晨7:20分“宕机”
  6. 《潜伏》走红背后的心理原因
  7. 别被布线“老思想”拌倒
  8. 【集训队作业2018】喂鸽子
  9. node安装升级过程中遇到的问题汇总
  10. 【转】【Mysql学习】之Mac上用终端使用mySQL