李煜东太神了啊啊啊啊啊!

生日蛋糕,著名搜索神题(还有虫食算)。

当年的我30分....

这哥们的程序0ms...

还有他的树网的核也巨TM神。

疯狂剪枝!

DFS(int d, int s, int v, int lastR, int lastH)

剪枝1.考虑在每一层内枚举H,R时的上下界。

最小肯定是当前层数d,最大呢?

考虑:

N - v = ∑hi * ri * ri(i = 1...d)

N - v >= R * R * H

R的最大值显然是H取最小的时候。

H = 1 时,R * R <= N - v

R <= sqrt(N - v)

接下来考虑H的最大:

R * R * H <= N - v

H <= (N - v) / (R * R)

剪枝2.

预处理出前 i 层的最小表面积/体积,记为mins和minv。

则 若在某一层的 v + minv[d] > N 剪枝

若在某一层的 s + mins[d] >= ans 剪枝

剪枝3.

观察 N 和 S 的公式:

N - v = ∑ri * ri * hi (i = d...M)

S - s = 2 * ∑ri * hi(i = d...M)

很相似。于是考虑得出这两个式子之间的不等关系:

rd * (S - s) >= 2 * ∑ri * ri * hi(i = d...M) = 2 * (N - v)

rd * (S - s) >= 2 * (N - v)

2 * (N - v) / rd + s <= S

如果 ans <= 2 * (N - v) / rd + s 那么 ans <= S

此时即可剪枝。

这样我们就得到了一个0ms的玄学搜索...

疯狂%李煜东大佬%%%

 #include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int N2 = , INF = 0x7f7f7f7f; int N, M, ans = INF, mins[N2], minv[N2]; void DFS(int d, int s, int v, int lastR, int lastH) {
if(!d) {
if(v == N) {
ans = min(ans, s);
}
return;
}
for(int R = min(lastR - , (int)(sqrt(N - v))); R >= d; R--) {
/*if((2 * (N - v)) / R + s >= ans) { /// WA
continue;
}*/
if(d == M) {
s = R * R;
}
for(int H = min(lastH - , (N - v) / (R * R)); H >= d; H--) {
int v2 = v + R * R * H;
int s2 = s + * R * H;
if(( * (N - v2)) / R + s2 >= ans) {
continue;
}
if(s2 + mins[d - ] >= ans) {
continue;
}
if(v2 + minv[d - ] > N) {
continue;
}
DFS(d - , s2, v2, R, H);
}
}
return;
} void init(int n) {
for(int i = ; i <= n; i++) {
mins[i] = mins[i - ] + * i * i;
minv[i] = minv[i - ] + i * i * i;
}
return;
} int main() {
scanf("%d%d", &N, &M); init(M); DFS(M, , , INF, INF); printf("%d", (ans == INF) ? : ans);
return ;
}

AC代码

看我的注释,那个神奇的地方如果剪枝就会WA两个点,剪早了,但是不知道原理...

洛谷P1731 生日蛋糕的更多相关文章

  1. 洛谷 P1731 生日蛋糕

    /*洛谷 1731 生日蛋糕 傻傻的-1 T成了傻逼*/ #include<cstdio> #include<iostream> #include<cmath> # ...

  2. 洛谷P1731生日蛋糕(dfs+剪枝)

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

  3. 【题解】洛谷P1731 [NOI1999] 生日蛋糕(搜索+剪枝)

    洛谷P1731:https://www.luogu.org/problemnew/show/P1731 思路 三重剪枝 当前表面积+下一层表面积如果超过最优值就退出 当前体积+下一层体积如果超过总体积 ...

  4. 洛谷 P1731 [NOI1999]生日蛋糕 && POJ 1190 生日蛋糕

    题目传送门(洛谷)  OR 题目传送门(POJ) 解题思路: 一道搜索题,暴力思路比较容易想出来,但是这道题不剪枝肯定会TLE.所以这道题难点在于如何剪枝. 1.如果当前状态答案已经比我们以前某个状态 ...

  5. 洛谷 P1731 [NOI1999]生日蛋糕

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

  6. 洛谷——P1731 [NOI1999]生日蛋糕

    P1731 [NOI1999]生日蛋糕 搜索+剪枝 常见的剪枝: 若当前状态+后面所要搜索的最差的状态$>$或是$<$最后的状态,就返回 预处理最差的状态 #include<iost ...

  7. C++ 洛谷 P1731 [NOI1999]生日蛋糕

    P1731 [NOI1999]生日蛋糕 一本通上也有. 这TM是一道极其简单的深搜剪枝(DP当然可以的了,这里我只讲深搜). 首先圆柱公式:(有点数学基础都知道) V=πR2H S侧=π2RH S底= ...

  8. [洛谷P1731][NOI1999]生日蛋糕(dfs)(剪枝)

    典型的深搜+剪枝策略 我们采用可行性剪枝.上下界剪枝.优化搜索顺序剪枝.最优性剪枝的方面来帮助我们进行剪枝. 也许有人还不知道剪枝,那我就弱弱地为大家补习一下吧qwq: .优化搜索顺序: 在一些搜索问 ...

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

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

随机推荐

  1. springmvc通过HttpServletRequest进行参数传递

    @RequestMapping("/itemEdit") public String itemEdit(HttpServletRequest request, Model mode ...

  2. 网络编程--使用UDP发送接收数据

    package com.zhangxueliang.udp; import java.io.IOException; import java.net.DatagramPacket; import ja ...

  3. day 7-22 进程,线程,协程

    一.什么是进程 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体.它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理 ...

  4. 关于mysql远程登录问题

    问题:mysql不能实现远程登录 前提:mysql开启了远程登录账号,安全组也放行了3306,防火墙是iptables,也加入了3306放行,但是还是不能实现远程访问 解决办法,使用iptables ...

  5. shiro使用ajax登陆实现,success但页面无法跳转的问题

    首先:简述一下登陆的后台流程 页面提交——>对应controller中的方法——>对应Realm认证——>controller返回 json 这样,无论成功与否,都有返回值,可以用 ...

  6. echo显示颜色

    如有转载,不胜荣幸.http://www.cnblogs.com/aaron-agu/ [;;34m hello aaron \[0m”

  7. LoadRunner Vuser接口测试脚本 Post举例

    发送内容为JSON的POST请求需要加入"EncType=application/json",表单参数不需要.(JAVA API) // POST接口调用 web.custom_r ...

  8. WPF中如何调整TabControl的大小,使其跟随Window的大小而改变?

    多年不写技术博客,手生的很,也不知道大家都关注什么,最近在研究Wpf及3d模型的展示,碰到很多问题,这个是最后一个问题,写出来小结一下...... WPF中如何调整TabControl的大小,使其跟随 ...

  9. Xtoken

    “我希望有一种模式,利用群体的智慧让最好的想法总能够脱颖而出”. 博弈模型 背景 本文为NEO社区理事会秘书长陶荣祺在全球创业周区块链创新与发展论坛上的主题演讲<Xtoken代观社区驱动群体智慧 ...

  10. java代码自动下载Spring Boot用户手册

    本示例演示Spring Boot 1.5.9.RELEASE版本的用户手册下载 pom.xml <?xml version="1.0" encoding="UTF- ...