• 【解题报告】 [NOI1999]生日蛋糕


    【解题报告】 [NOI1999]生日蛋糕

    题目:生日蛋糕

    解题思路:

    dfs枚举

    这道题上面的表面积不用管,只用管侧面积和体积,上面的表面积就是最底下的圆的面积

    我们只需要枚举半径和高度就OK了

    另外需要剪枝,如果枚举到dep-1层时,最小体积大于n的话,我们就可以进行剪枝了

    AC代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    const int maxn=0x3f3f3f;
    const int N=20007;
    int ans=maxn;
    int mins[N],minv[N],n,m;
    void dfs(int now,int r,int h,int s,int v)
    {
    	int mh=h;
    	if(now==0)
    	{
    		if(v==n)
    		ans=min(ans,s);
    		return ;
    	}
    	if(s+mins[now-1]>=ans)
    	return ;
    	if(v+minv[now-1]>n)
    	return ;
    	if(2*(n-v)/r+s>=ans)
    	return ;
    	for(int i=r-1;i>=now;i--)
    	{
    		if(now==m)
    		s=i*i;
    		mh=min(h-1,(n-minv[now-1]-v)/i/i);
    		for(int j=mh;j>=now;j--)
    		dfs(now-1,i,j,s+2*i*j,v+i*i*j);
    	}
    }
    int main()
    {
    	cin>>n>>m;
    	for(int i=1;i<=m;i++)
    	{
    		mins[i]=mins[i-1]+2*i*i;
    		minv[i]=minv[i]+i*i*i;
    	}
    	dfs(m,n,n,0,0);
    	if(ans==maxn)
    	cout<<0<<endl;
    	else
    	cout<<ans<<endl;
    	return 0;
    }
    
  • 相关阅读:
    交互式监控工具glances
    性能测试工具Locust
    CentOS 7 安装 PostgreSQL 教程
    Vue表单
    Vue事件处理
    Vue列表渲染
    Vue条件渲染
    Vue中class与style绑定
    GIT命令操作
    Git简介
  • 原文地址:https://www.cnblogs.com/wweiyi2004/p/11407494.html
Copyright © 2020-2023  润新知