您的位置:首页 > 其它

生日蛋糕

2017-07-27 09:18 106 查看
https://www.luogu.org/problem/show?pid=1731

是一道搜索题,重点在于剪枝。

具体写在代码中

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
int n,m,ans=0x7fffffff;
void dfs(int t,int r,int h,int v,int s)
{
if(t==m)
{
if(v==0) ans=min(ans,s);
return;
}
if(s+(m-t)>=ans) return;//s+最小的面积>=当前答案,一定不可以(这个最小体积是假设的全是1)
if(v-r*r*h*(m-t)>0) return;//v-最大的体积大于零,那一定不成功
for(int i=r-1;i>=m-t;i--)
for(int j=h-1;j>=m-t;j--){
if(v-i*i*j>=0) dfs(t+1,i,j,v-i*i*j,s+(t+1==1)*i*i+2*i*j);//是>=0啊,我当时写了个>0,傻乎乎地调了半天……
}

}
int main()
{
scanf("%d%d",&n,&m);
dfs(0,sqrt(n)+1,sqrt(n)+1,n,0);
if(ans!=0x7fffffff)printf("%d",ans);
else printf("0");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: