zoukankan      html  css  js  c++  java
  • [NOI1999] 生日蛋糕

    题目背景

    7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为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外,以上所有数据皆为正整数)

    题目描述

    输入输出格式

    输入格式:

    有两行,第一行为N(N<=20000),表示待制作的蛋糕的体积为Nπ;第二行为M(M<=15),表示蛋糕的层数为M。

    输出格式:

    仅一行,是一个正整数S(若无解则S=0)。

    输入输出样例

    输入样例#1:

    100
    2

    输出样例#1:

    68

    题解

    剪枝+搜索
    本来自己的剪枝

    1. 如果当前答案比最优解大,return
    2. 如果当前答案比要求体积大,return
    3. 如果当前体积+后面的最大体积<n,return

    这样wa了一个点.
    看了题解之后,把第三个剪枝换成了
    如果当前答案+后面能得到的最大表面积依然>=答案,return
    其实还有一些其他的剪枝,但这些就够了

    #include<bits/stdc++.h>
    #define in(i) (i=read())
    using namespace std;
    inline int read() {
        int ans=0,f=1; char i=getchar();
        while(i<'0' || i>'9') {if(i=='-') f=-1; i=getchar();}
        while(i>='0' && i<='9') {ans=(ans<<1)+(ans<<3)+i-'0'; i=getchar();}
        return ans*f;
    }
    const int inf=2147483647;
    int n,m,ans=inf;
    void dfs(int floor,int sum,int V,int r,int h) {
        if(sum>=ans || V>n) return;//1,2
        if((n-V)/r*2+sum>=ans) return;//3
        //if(V+(r*r*h)*(m-floor+1)<n) return; 原3
        if(floor==m+1) {
            if(V==n) ans=sum;
            return;
        }
        for(int i=r-1;i>=m-floor+1;i--) {
            for(int j=h-1;j>=m-floor+1;j--) {
                if(floor==1) dfs(floor+1,sum+(2*i*j)+(i*i),V+(i*i*j),i,j);
                else dfs(floor+1,sum+(2*i*j),V+(i*i*j),i,j);
            }
        }
    }
    int main()
    {
        in(n); in(m);
        dfs(1,0,0,sqrt(n)+1,n+1);
        if(ans==inf) cout<<0<<endl;
        else cout<<ans<<endl;
        return 0;
    }
    

    博主蒟蒻,随意转载.但必须附上原文链接

    http://www.cnblogs.com/real-l/

  • 相关阅读:
    UI:UITableView表视图
    UI:页面传值、单例模式传值、属性传值、NSUserDefaults 数据持久化
    UI:UINavigationController、界面通信
    UI:UIScrollView、UIPageControl
    UI:tomcat(说话小程序)、相框动画、UISgmentcontrol、UISwitch
    UI:触摸事件 与 事件的回应
    UI:转自互联网资料
    UI:MVC设计模式
    OC:copy 与 retain 的区别
    UI:数据持久化
  • 原文地址:https://www.cnblogs.com/real-l/p/9442174.html
Copyright © 2011-2022 走看看