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

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

当年的我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. python爬虫之短信报警

    1 import smtplib import email.mime.multipart import email.mime.text def send_email(content=''): &quo ...

  2. 【转】解决Maxwell发送Kafka消息数据倾斜问题

    最近用Maxwell解析MySQL的Binlog,发送到Kafka进行处理,测试的时候发现一个问题,就是Kafka的Offset严重倾斜,三个partition,其中一个的offset已经快200万了 ...

  3. 在linux系统中实现各项监控的关键技术(1)--cpu使用率的计算

    转载自 Linux中通过/proc/stat等文件计算Cpu使用率 http://www.blogjava.net/fjzag/articles/317773.html proc文件系统 /proc文 ...

  4. Math java

    package cn.liuliu.com; import java.math.BigDecimal; import java.math.BigInteger; /* * 一.Math类? * * 1 ...

  5. js定时函数,定时改变字体的大小

    <html> <head> </head> <body> <div id="d"> js控制字体大小 </div& ...

  6. How to flash Havoc on enchilada

    update fastboot and adb fastboot oem unlock adb debug enchilada reboot to fastboot fastboot devices ...

  7. How to blog on Github

    git clone https://github.com/test/test.github.io.git cd ~/test.github.io git config --global push.de ...

  8. <c:forEach>可以默认的把以逗号分隔的字符串作为一个集合来遍历

    <c:forEach>可以默认的把以逗号分隔的字符串作为一个集合来遍历

  9. codeforces158D

    Ice Sculptures CodeForces - 158D The Berland University is preparing to celebrate the 256-th anniver ...

  10. [离散时间信号处理学习笔记] 9. z变换性质

    z变换描述 $x[n] \stackrel{\mathcal{Z}}{\longleftrightarrow}X(z) ,\quad ROC=R_x$ 序列$x[n]$经过z变换后得到复变函数$X(z ...