HDU POJ 1190 生日蛋糕 dfs + 剪枝

原创 2016年08月30日 23:11:32

题目链接:poj 1190






题解:这题刚开始想不到搜索的初始状态,没办法下手,迷迷糊糊的,后来就想着 按照给定n的初始入手,吧未放置的第0层看成一个圆,不是立体,高度也设为n + 1, 然后 从下往上找。。。。 想这个思路 花了太长时间   。。。。虽然是一发a但是感觉 自己对搜索的理解 太浅  能力还是要提高啊



AC code:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>

using namespace std;

#define debug 0
#define INF 0x3f3f3f3f

const int maxn = 20 + 5;
int n, m;
int minv[maxn], ans;

void dfs(int v, int deep, int r, int h, int temp)//v:当前剩余体积,deep层数,r,h:半径,高的范围
{
	if (deep == 0)
	{
		if (v == 0 && temp < ans)
			ans = temp;//更新最小值
		return;
	}

	if (v - minv[deep - 1] < 0 || temp >= ans || 2 * v / r + temp >= ans)//2*v/r+temp>=ans 当前解+剩余资源的最优解>=最优解
		return;
	for (int R = r - 1; R >= deep; R--)//枚举半径
	{
		int MH = min(h - 1, (v - minv[deep - 1]) / R / R);//取两者较小者
		for (int H = MH; H >= deep; H--)//枚举高
		{
			if (v - R * R * H >= 0)
			{
				if (deep == m)
					temp = R * R;
				temp += 2 * R * H;
				dfs(v - R * R * H, deep - 1, R, H, temp);
				temp -= 2 * R * H;//返回递归前状态
				if (deep == m)
					temp = 0;
			}
		}
	}
}
int main()
{
#if debug
	freopen("in.txt", "r", stdin);
#endif //debug
	minv[0] = 0;
	for (int i = 1; i <= 20; i++)
		minv[i] = minv[i - 1] + i * i * i;  //从上到下前i层蛋糕需要的最小体积

	while (~scanf("%d%d", &n, &m))
	{
		ans = INF;
		dfs(n, m, (int)sqrt(n) + 1, n + 1, 0);

		if (ans == INF)
			ans = 0;

		printf("%d\n", ans);
	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

POJ 1190 生日蛋糕(DFS+剪枝)

本题是一道DFS+剪枝的经典例题,详情请看代码注释,里面按照我个人的理解进行了详细的解释

POJ-1190-生日蛋糕-DFS(深搜)-枚举-多重剪枝

题目链接: 这个题目很好,有难度;可以好好的多做做; #include #include #include #include #include #include #include #include...
  • wlxsq
  • wlxsq
  • 2015-07-23 16:46
  • 716

POJ - 1190 生日蛋糕 dfs+剪枝

思路:说一下最重要的剪枝,如果当前已经使用了v的体积,为了让剩下的表面积最小,最好的办法就是让R尽量大,因为V = πR 2H,A' = 2πRH,A' = V / R * 2 ,最大的R一定是取当...

POJ 1190 生日蛋糕 估计最小答案dfs剪枝

题意:想做一个m层(每层是一个圆柱)总体积为n*pi的蛋糕抹奶油,想使得抹的奶油的面积/pi = s最小,问最小的s是多少。 题解:化简下得到sigma(ri * ri * hi)= n,s =si...

Poj 1190 生日蛋糕 (DFS 剪枝)

隐约记得前几年网络赛有过类似的题,当时毫无想法…… 参考了:http://blog.csdn.net/lencle/article/details/7016191 可能还能进一步优化,可以参考:h...

POJ1190 生日蛋糕 ACM解题报告(DFS回溯+剪枝)

本题整了大半个下午,由于本渣渣刚开始做搜索+剪枝,搜索就够整好久了,剪枝是更加想不到,只能百度向大神学习,整了两个多小时也算是搞明白了情况。 首先这题题目感觉是表达不清,明明就是顶层不涂奶油,底层要涂...

poj 1190 生日蛋糕(dfs 剪枝)

剪枝十分神奇

poj1190 生日蛋糕 dfs神剪枝

转载自:http://blog.csdn.net/gubojun123/article/details/7804516 由于深度一定(m),所以使用深度优先搜索,自上而下的设定蛋糕序号,最顶...

POJ 1190 生日蛋糕(DFS:优化剪枝)

POJ 1190 生日蛋糕(DFS:优化剪枝) http://poj.org/problem?id=1190 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是...

(poj1190)生日蛋糕(DFS和数学知识,剪枝!)

题目描述 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)