生日蛋糕(dfs剪枝)

简介: 生日蛋糕(dfs剪枝)
#include<bits/stdc++.h>
using namespace std;
const int N=25,INF=0x3f3f3f3f;
int R[N],H[N];
int minv[N],mins[N];
int n,m;
int res;
void dfs(int dep,int V,int S)
{
    if(minv[dep]+V>n) return;
    if(mins[dep]+S>res) return;
    if(S+2*(n-V)/R[dep+1]>=res) return;
    if(!dep)
    {
        if(V==n) res=min(S,res);
        return;
    }
    for(int r=min(R[dep+1]-1,(int)sqrt((n-V-minv[dep-1])/dep));r>=dep;r--)
    {
        for(int h=min(H[dep+1]-1,(n-V-minv[dep-1])/(r*r));h>=dep;h--)
        {
            R[dep]=r; H[dep]=h;
            int t=dep==m?r*r:0;
            dfs(dep-1,V+r*r*h,S+2*r*h+t);
        }
    }
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        minv[i]=minv[i-1]+i*i*i;
        mins[i]=mins[i-1]+2*i*i;
    }
    res=INF;   R[m+1]=INF,H[m+1]=INF;
    dfs(m,0,0);//现在第几层 这层之下的面积,体积是多少
    if(res==INF) cout<<0<<endl;
    else cout<<res<<endl;
}
目录
相关文章
|
6月前
|
C++
DFS之剪枝与优化
DFS之剪枝与优化
42 0
|
4月前
|
机器学习/深度学习 消息中间件 算法
DFS - 常见算法题总结
DFS - 常见算法题总结
|
10月前
Biggest Number (DFS+剪枝)
Biggest Number (DFS+剪枝)
26 0
|
11月前
|
定位技术
DFS:奇偶性剪枝+可行性剪枝
DFS:奇偶性剪枝+可行性剪枝
|
机器学习/深度学习
(dfs剪枝)(递归)1209. 带分数
(dfs剪枝)(递归)1209. 带分数
56 0
|
算法
【和zqy学算法】Day1:DFS与BFS
【和zqy学算法】Day1:DFS与BFS
121 0
|
机器学习/深度学习 测试技术
DFS之剪枝
笔记
55 0
DFS之剪枝
DFS——剪枝实战
DFS——剪枝实战
100 0
DFS专题训练1
DFS专题训练1
64 0
DFS专题训练1
|
vr&ar
DFS之剪枝与优化(二)
AcWing 167. 木棒
111 1
DFS之剪枝与优化(二)