本文主要是介绍信息学奥赛一本通T1441-生日蛋糕【dfs】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
信息学奥赛一本通T1441-生日蛋糕 - C语言网 (dotcpp.com)
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int N=1e5+100;
int n,m;
int res=1e9;
void dfs(int spv,int cnt,int r,int h,int sarea)
//spv:剩余的体积,cnt:第几层,r:半径,h:高,sarea:当前表面积和
{if(spv<0||sarea>=res)return;if(r*r*h*(m-cnt+1)<spv)return;//以此时的半径和高算出来剩余层数的总体积比做蛋糕用的剩余体积还小,后面的半径和高都不会满足了if(cnt>m){if(spv>0)//还有剩余的体积return;res=min(res,sarea);return;}for(int i=r-1;i>=m-cnt+1;i--){for(int j=h-1;j>=m-cnt+1;j--){dfs(spv-i*i*j,cnt+1,i,j,sarea+2*i*j);}}
}
signed main()
{cin>>n>>m;//最底层的体积r*r*h不超过nfor(int r=sqrt(n);r>=m;r--)//半径从大到小枚举{for(int h=n/(r*r);h>=m;h--)//高从大到小枚举{dfs(n-r*r*h,2,r,h,r*r+2*r*h);}}if(res!=1e9)cout<<res;elsecout<<0;return 0;
}
这篇关于信息学奥赛一本通T1441-生日蛋糕【dfs】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!