题意
要制作一个体积为N π 的M层生日蛋糕,每层都是一个圆柱体。
设从下往上数第i(1 <= i <= M)层蛋糕是半径为R i , 高度为H i 的圆柱。当i < M
时,要求R i > R i+1 且H i > H i+1 。
由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的
下底面除外)的面积Q最小。
令Q = Sπ请编程对给出的N和M,找出蛋糕的制作方案(适当的Ri和Hi的值),使S最小。
(除Q外,以上所有数据皆为正整数)
思路
深度优先搜索,枚举每一层可能的高度和半径。
确定搜索范围: 底层蛋糕的最大可能半径和最大可能高度
剪枝
剪枝1:搭建过程中发现面积超过已经求得的最优表面积,则停止搭建
剪枝2:搭建过程中预见到再往上搭,高度已经无法安排,或者半径已
经无法安排,则停止搭建剪枝3:搭建过程中发现还没搭的那些层的体积,一定会超过还缺的体
积,则停止搭建剪枝4:搭建过程中发现还没搭的那些层的体积,最大也到不了还缺的
体积,则停止搭建
1 | #include<iostream> |