「NOI1999」「LuoguP1731」生日蛋糕(爆搜剪枝
题目背景
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)。
输入输出样例
题解
可以说是童年阴影了。
众所周知的一道爆搜题,考点大概是剪枝?
/*
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」生日蛋糕(爆搜剪枝的更多相关文章
- 【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1817 Solved: 665[Submit][Status] ...
- HDU-4848 Wow! Such Conquering! 爆搜+剪枝
Wow! Such Conquering! 题意:一个n*n的数字格,Txy表示x到y的时间.最后一行n-1个数字代表分别到2-n的最晚时间,自己在1号点,求到达这些点的时间和的最少值,如果没有满足情 ...
- 洛谷P1731 [NOI1999]生日蛋糕(爆搜)
题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri, 高度为Hi的圆柱 ...
- 「NOIP2017」「LuoguP3959」 宝藏(爆搜
题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 nn 个深埋在地下的宝藏屋, 也给出了这 nn 个宝藏屋之间可供开发的mm 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中的宝藏. ...
- 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇
http://www.4gamer.net/games/216/G021678/20140714079/ 连载第2回的本回, Arc System Works开发的格斗游戏「GUILTY G ...
- 使用注册表优化终端、编辑器的中英字体混合显示,如「Consolas + 雅黑」「Monaco + 雅黑」
在终端.cmd.编辑器中偶尔会有中文字符出现,Windows下默认的点阵字体「宋体」和等宽英文字符放在一起非常违和.一个解决方法是下载混合字体,比如「Consolas + YAHEI hybrid」, ...
- 众安「尊享e生」果真牛的不可一世么?
近日,具有互联网基因的.亏损大户(成立三年基本没盈利,今年二季度末亏损近4亿,你能指望它多厉害?).财产险公司—众安推出“尊享e生”中高端医疗保险(财险公司经营中高端医疗真的很厉害?真的是中高端医疗险 ...
- XCActionBar 「Xcode 中的 Alfred」
下载地址:https://github.com/pdcgomes/XCActionBar 基本命令: (1)「command+shift+8」或者双击「command」键可以打开「动作输入框窗口」 ( ...
- Git 执行 「fork 出来的仓库」和「最新版本的原仓库」内容同步更新
当我们在 GitHub 上 fork 出一个仓库后,如果原仓库更新了,此时怎样才能保证我们 fork 出来的仓库和原仓库内容一致呢?我们一般关注的是仓库的 master(主干分支)的内容,通过以下步骤 ...
随机推荐
- GridView数据绑定控件的模版列时设置显示的格式
形式 语法 结果 数字 {0:N2} 12.36 数字 {0:N0} 13 货币 {0:c2} $12.36 货币 {0:c4} $12.3656 货币 "¥{0:N2}&q ...
- 在windows下安装gulp[转]
一.准备工作 1.什么是 npm? npm 是 nodejs 的包管理工具,主要功能就是管理.更新.搜索.发布node的包.Gulp 就是通过 NPM 安装的.关于 NPM 中文介绍,这里有一篇非常不 ...
- [Algorithm] Linked List Data Structure in JavaScript
A linked list is a collection of items where each item points to the next one in the list. Because o ...
- C#报错"线程间操作无效: 从不是创建控件“XXX”的线程访问它"--解决示例
C# Winform程序中,使用线程对界面进行更新需要特殊处理,否则会出现异常“线程间操作无效: 从不是创建控件“taskView”的线程访问它.” 在网文“http://www.cnblogs.co ...
- Odoo MRP 实际成本
Odoo MRP 8 对于 产成品并不支持 实际成本记账 本人开发了一个模块,支持此特性, 可以在 淘宝店铺 购买 https://item.taobao.com/item.htm?_u=85jr9d ...
- C和C++代码精粹笔记1
CH1 更好的C 运算符重载规定,必须有一个为用户自定义类型 一些输出没注意到的函数: float x = 123.456, y = 12345; //cout.precision(2); //显示两 ...
- Content Provider 详解
几个概念:Cursor. Content provider . Uri .contentresolver 1. Cursor : 个人理解为数据库中的一行数据,它是每行数据的集合.它是一个类.通过它 ...
- 一些常用的shell
1 if语句 if语句的三种写法,注意[]的两个空格,else if 写法是elif,不要漏了fi结束 if [ xxx ] then fi if [ xxx ] then echo "&q ...
- nice命令兼容性分析实例
背景 产品实验室出现一例日志转储问题,经定位发现当前版本号没有提供nice命令,而cron拉起定时任务时,却调用了nice命令,对定时任务做优先级调整. 毫无疑问兴许版本号须要提供nice命令,可是是 ...
- vue directive demo
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...