题目背景

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. react request.js 函数封装

    1.request.js  函数封装 import { Toast } from 'antd-mobile'; import axios from 'axios'; import store from ...

  2. vue 避免渲染时闪烁

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  3. mysql 执行sql文件的方法

     http://philos.iteye.com/blog/162051   实战代码: #mysql导入mysql -um4n -p01D060A476642BA8335B832AC5B211F22 ...

  4. VMware虚拟机下如何安装一个64位的win7系统

    原文地址:http://www.xitongcheng.com/jiaocheng/win7_article_21001.html VMware虚拟机软件可以在一台电脑上运行多个操作系统,一些网友想在 ...

  5. 详谈kubernetes更新-2

    系列目录 本文详细探索deployment在滚动更新时候的行为 要详细探讨的参数描述: livenessProbe:存活性探测.判断pod是否已经停止 readinessProbe:就绪性探测.判断p ...

  6. ORACLE 36进制和10进制,互相转换函数

    第一部分 --36转10进制 create or replace function f_36to10 (str varchar) return int  is returnValue int;   s ...

  7. 2018-11-9-匿名函数&递归函数初识

    1.匿名函数(lambda) 2.递归函数初识

  8. linux杂谈(十三):代理server

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/linux_player_c/article/details/24707457 1.代理server的 ...

  9. Linux struct itimerval使用方法

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/hbuxiaofei/article/details/35569229 先看一段代码 #include ...

  10. Interpreter Pattern

    1.Interpreter模式的目的就是提供一个一门定义语言的语法表示的解释器,然后通过这个解释器来解释语言中的句子. 2.Interpreter模式结构图 3.实现 #ifndef _CONTEXT ...