题目背景

7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层

生日蛋糕,每层都是一个圆柱体。

设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri, 高度为Hi的圆柱。当i<M时,要求Ri>Ri+1且Hi>Hi+1

由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。

令Q= Sπ

请编程对给出的N和M,找出蛋糕的制作方案(适当的Ri和Hi的值),使S最小。

(除Q外,以上所有数据皆为正整数)

题目描述

输入输出格式

输入格式:

有两行,第一行为N(N<=20000),表示待制作的蛋糕的体积为Nπ;第二行为M(M<=15),表示蛋糕的层数为M。

输出格式:

仅一行,是一个正整数S(若无解则S=0)。

输入输出样例

输入样例#1:
复制

100
2
输出样例#1: 复制

68

题解

可以说是童年阴影了。

众所周知的一道爆搜题,考点大概是剪枝?

 /*
qwerta
P1731 [NOI1999]生日蛋糕
Accepted
100
代码 C++,1.45KB
提交时间 2018-10-10 11:55:48
耗时/内存
760ms, 1256KB
*/
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
#define R register
int n,m;
long long q=;
int f[][][];
int fx[][];
void search(int d,int rbef,int hbef,int vres,int sbef)//d:深度 rbef:上一层半径 hbef:上一层高度 vres:还剩的体积 sbef:已经用了多少面积
{
if(d==m+)
{
if(vres==)
q=min(q,(long long)sbef);//搜到了就更新
return;
}
if(vres<=)return;//没体积了,剪掉
if(sbef>q)return;//面积大了,剪掉
if(rbef<=(m-d+))return;//半径小了不够搭这么多层,剪掉
if(hbef<=(m-d+))return;//高度矮了不够搭这么多层,剪掉
if(*vres/rbef+sbef>q)return;//划重点!如果当前体积的最小面积还大了,剪掉
//
if(fx[d][])//记忆化 fx[d][0]记录还剩d层时至少要的体积,fx[d][1]为面积
{
if(fx[d][]>vres)return;//剩体积的不够用,剪掉
if(fx[d][]+sbef>q)return;//最小的法子涂也面积大了,剪掉
}
else
{
int v=,s=;
for(R int i=d;i<=m;++i)//for一遍
{
int r=(m+-i);
int h=(m+-i);
v+=r*r*h,s+=*r*h;
}
fx[d][]=v;
fx[d][]=s;
if(v>vres)return;
if(s+sbef>q)return;
}
//
if(f[d][rbef][hbef])//记录在d,rbef,hbef的情况下的最大体积
{
if(f[d][rbef][hbef]<vres)return;//往大了搭还小了,剪掉
}
else
{
int v=;
for(R int i=d;i<=m;++i)
{
int r=(rbef-(i-(d-)));
int h=(hbef-(i-(d-)));
v+=r*r*h;
}
f[d][rbef][hbef]=v;
if(v<vres)return;
}
//剪爽了,开始搜
for(R int r=;r<rbef;++r)
for(R int h=;h<hbef;++h)
{
int s=;
if(d==)s=r*r;
search(d+,r,h,vres-r*r*h,sbef+s+*r*h);
}
return;
}
int main()
{
//freopen("a.in","r",stdin);
scanf("%d%d",&n,&m);
search(,,,n,);
cout<<q;
return ;
}

代码又慢又长哦,真的要看吗QAQ

「NOI1999」「LuoguP1731」生日蛋糕(爆搜剪枝的更多相关文章

  1. 【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 1817  Solved: 665[Submit][Status] ...

  2. HDU-4848 Wow! Such Conquering! 爆搜+剪枝

    Wow! Such Conquering! 题意:一个n*n的数字格,Txy表示x到y的时间.最后一行n-1个数字代表分别到2-n的最晚时间,自己在1号点,求到达这些点的时间和的最少值,如果没有满足情 ...

  3. 洛谷P1731 [NOI1999]生日蛋糕(爆搜)

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

  4. 「NOIP2017」「LuoguP3959」 宝藏(爆搜

    题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 nn 个深埋在地下的宝藏屋, 也给出了这 nn 个宝藏屋之间可供开发的mm 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中的宝藏. ...

  5. 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇

    http://www.4gamer.net/games/216/G021678/20140714079/     连载第2回的本回,  Arc System Works开发的格斗游戏「GUILTY G ...

  6. 使用注册表优化终端、编辑器的中英字体混合显示,如「Consolas + 雅黑」「Monaco + 雅黑」

    在终端.cmd.编辑器中偶尔会有中文字符出现,Windows下默认的点阵字体「宋体」和等宽英文字符放在一起非常违和.一个解决方法是下载混合字体,比如「Consolas + YAHEI hybrid」, ...

  7. 众安「尊享e生」果真牛的不可一世么?

    近日,具有互联网基因的.亏损大户(成立三年基本没盈利,今年二季度末亏损近4亿,你能指望它多厉害?).财产险公司—众安推出“尊享e生”中高端医疗保险(财险公司经营中高端医疗真的很厉害?真的是中高端医疗险 ...

  8. XCActionBar 「Xcode 中的 Alfred」

    下载地址:https://github.com/pdcgomes/XCActionBar 基本命令: (1)「command+shift+8」或者双击「command」键可以打开「动作输入框窗口」 ( ...

  9. Git 执行 「fork 出来的仓库」和「最新版本的原仓库」内容同步更新

    当我们在 GitHub 上 fork 出一个仓库后,如果原仓库更新了,此时怎样才能保证我们 fork 出来的仓库和原仓库内容一致呢?我们一般关注的是仓库的 master(主干分支)的内容,通过以下步骤 ...

随机推荐

  1. 使用hexo搭建github个人博客网站

    搭建步骤: 1>Mac或win电脑一台,本文以mac为例. 2>下载安装Git和Node 3>安装hexo 4>注册登录GitHub,创建一个仓库,库名格式为:GitHub用户 ...

  2. UVA - 1416 Warfare And Logistics (最短路)

    Description The army of United Nations launched a new wave of air strikes on terroristforces. The ob ...

  3. sql 表的部分字段查找 的结果集

    传统sql从多个对象中获得的list<Object> ,可以这样处理(利用Map)  List list = query.getList(sql);  //封装成BB类型  List< ...

  4. 综合运用: C++11 多线程下生产者消费者模型详解(转)

    生产者消费者问题是多线程并发中一个非常经典的问题,相信学过操作系统课程的同学都清楚这个问题的根源.本文将就四种情况分析并介绍生产者和消费者问题,它们分别是:单生产者-单消费者模型,单生产者-多消费者模 ...

  5. Node.js Express 框架 Express

    Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速 ...

  6. C结构体对齐

    函数模板针对仅参数类型不同的函数?   http://blog.csdn.net/renrenhappy/article/details/5931457     计算结构体的大小就要考虑数据对齐问题. ...

  7. 爬虫框架_scrapy1

    介绍: Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可用 ...

  8. D3js-API介绍【英】

    Everything in D3 is scoped under the d3 namespace. D3 uses semantic versioning. You can find the cur ...

  9. mysql could not be resolved: Name or service not known

    问题: mysql DNS反解:skip-name-resolve 错误日志有类似警告: 1.120119 16:26:04 [Warning] IP address '192.168.1.10' c ...

  10. 手机pc显示不同的内容

    <script type="text/javascript"> // var txt = $('#sjyincang').html(); // alert(txt); ...