zoukankan      html  css  js  c++  java
  • [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

    题不错

    下次再来思考思考

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

    不全是自己想的

  • 相关阅读:
    迭代器,生成器,列表推倒式
    内置函数
    递归与二分算法
    装饰器
    函数进阶
    函数
    MLP神经网络 隐含层节点数的设置】如何设置神经网络隐藏层 的神经元个数
    用CNN及MLP等方法识别minist数据集
    ubuntu 安装Pangolin 过程
    ubuntu16.04 + Kdevelop + ROS开发和创建catkin_ws工作空间
  • 原文地址:https://www.cnblogs.com/Danzel-Aria233/p/12301272.html
Copyright © 2011-2022 走看看