• [POJ1190]生日蛋糕<DFS>


    题目链接:http://poj.org/problem?id=1190

    题看上去确实很复杂

    涉及到半径面积这些,其实看着真的很头疼

    但是除去这些就是剪枝优化的dfs算法

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<cmath>
    #include<algorithm>
    #include<queue>
    #include<utility>
    #include<stack>
    #include<cstdlib>
    #define ll long long
    #define inf 0x3fffffff
    #define maxn 10005
    #define maxm 30
    using namespace std;
    
    int read(){
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    
    void fre(){
         freopen("     .in","r",stdin);
         freopen("     .out","w",stdout);
    }
    
    int lminQ[maxm], lminV[maxm];
    int min_Q;
    int n,m;
    
    void dfs(int V, int Q, int step, int r, int h){
        if(step==0){
            if(V==n)min_Q=min(min_Q,Q);
            return;
        }
        if(V+lminV[step]>n || Q+lminQ[step]>min_Q)return;
        if(2*(n-V)/r+Q>=min_Q)return;
        int max_R=r-1;
        for(int i=max_R; i >= step; i--){
            if(step==m)Q=i*i;
            int max_H=min(((n-lminV[step-1]-V)/(i*i)), h-1);
            for(int j=max_H; j >= step; j--)
                dfs(V+i*i*j, Q+2*i*j, step-1, i, j);
        }
    }
    
    int main(){
        n=read();m=read();
        lminQ[0]=0,lminV[0]=0;
        for(int i=1;i<22;i++)
            lminQ[i]=lminQ[i-1]+2*i*i,lminV[i]=lminV[i-1]+i*i*i;
        min_Q=inf;
        dfs(0,0,m,100,10000);
        if(min_Q<inf)cout<<min_Q<<endl;
        else cout<<0<<endl;
        return 0;
    }
    View Code

    题不错

    下次再来思考思考

    这次借鉴了其他博主的思路

    不全是自己想的

  • 相关阅读:
    hbuilder(js+html+css)开发的APP效果实例
    基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一
    nodejs+IIS+WebMatrix
    小型设备嵌入式开发(.NET Micro Framework)
    SQL对数据进行统计、常用集合函数
    .Net Micro Framework 嵌入式开发
    js+html+css 开发App
    Dos.ORM
    ORM(ServiceStack,Moon,DbEntry,EasyDb,netnorm )
    商业款ORM servicestack llblgen
  • 原文地址:https://www.cnblogs.com/Danzel-Aria233/p/12301272.html
Copyright © 2020-2023  润新知