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

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

当年的我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. bootstrap.css.map 404

    删除bootstrap.css的最后一行即可: /*# sourceMappingURL=bootstrap.css.map */ English: from bootstrap-theme.css  ...

  2. git放弃修改,强制覆盖本地代码

    $ git fetch --all $ git reset --hard origin/master $ git pull

  3. java构造器和构建器

    本文摘自:https://blog.csdn.net/wh2827991/article/details/79013115 在实例化一个类的过程中,通常会遇到多个参数的构造函数,但如果有些参数是非必需 ...

  4. idea中Lombok的使用

    使用了lombok的注解(@Setter,@Getter,@ToString,@@RequiredArgsConstructor,@EqualsAndHashCode或@Data)之后,就不需要编写或 ...

  5. atlassian、jira账户无法注册来这里

    进入https://www.atlassian.com/try 注册成功 登陆 再次到邮箱点击链接 登陆成功(已经处于登陆状态:此时你已经拥有一个atlassian账户了)

  6. 思路:controller层:后台如何取值 前端如何给name赋值 例如是id赋值还是自己随意定义

    思路:controller层:后台如何取值 前端如何给name赋值 例如是id赋值还是自己随意定义

  7. JAVA web 使用有盟推送总结

    仔细阅读文档,下边的都是废话. 为了省事,iOS和Android 提供了所有了参数,需要那个了修改传参. //ios actionURL为自定义参数 $.ajax({ type : "POS ...

  8. ubuntu终端快捷键

    ctrl+alt+t 新终端 ctrl+shift+t打开新的标签页 ctrl+d关闭终端 ctrl+s 暂停屏幕输出 ctrl+q 继续屏幕输出 ctrl+l 清屏 ctrl+alt+f1 切换到第 ...

  9. M3U8文件

    M3U本质上说不是音频文件,它是音频文件的列表文件,是纯文本文件.你下载下来打开它,播放软件并不是播放它,而是根据它的记录找到网络地址进行在线播放. M3U文件的大小很小,也就是因为它里面没有任何音频 ...

  10. BZOJ3894文理分科——最小割

    题目描述  文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠 结过)  小P所在的班级要进行文理分科.他的班级可以用一个n*m的矩阵进行 描述,每个格子代表一个同学的座位.每位同学必须从 ...