主函式盡量少寫,都放到dfs裡面去
#include#include#include#include#includeusing namespace std;
const int maxn=20+5;
int minv[maxn],mina[maxn],maxv[maxn];
int area,bestarea=100000000;
int m,t;
int maxvfornrh(int n,int r,int h)//求出從n從到最上面一層的最大體積
return ans;
}int dfs(int v,int n,int r,int h)
}if(v<=0) return 7;//如果上公升一層後,v為負數,則返回,原因是上一層的體積太大,超出題目所給體積要求
if(minv[n]>v) return 2;//若從n層起的最小體積都大於所需要搭建的體積,則無法達到v,返回
if(mina[n]+area>=bestarea) return 3;//如果現有的表面積加上從n層到最上面一層的最小表面積都大於最優表面,則返回
if(hmaxvfornrh(n,r,h)) return 5;//如果所要搭建的面積比可以搭建的最大面積還要大,則無法達到所求面積,返回
for(int i=r;i>=n;i--)
}return 6;
}int main()
if(melse
return 0;
}
POJ 1190 生日蛋糕
生日蛋糕 一道很經典也很基礎的搜尋題目。有題目的條件我們可以得到兩個方程 sum rk rk hk n 和 s sum 2 rk hk r1 r1 首先考慮極端剪枝法。假設前i層體積為t,如果剩下的若干層,每層都去最小可能值,體積仍比n大,則剪去,如果剩下幾層都去最大值,體積仍比n小,也減去。如果當...
POJ 1190 生日蛋糕
呵呵,這道題弄死我。我覺得吧,凡事不能急於求成,比如這道經典的剪枝 搜尋,我就先查的題解,看了各種剪枝方法躊躇滿志,結果花了兩個小時寫的剪枝把自己都搞暈了。應該先有正確的搜尋方法再談剪枝不是嗎,所以我決定先用樸素的搜尋做一下 include includeint n,m int temp s 999...
POJ 1190 生日蛋糕
time limit 1000ms memory limit 10000k total submissions 17060 accepted 6074 7月17日是mr.w的生日,acm thu為此要製作乙個體積為n 的m層生日蛋糕,每層都是乙個圓柱體。設從下往上數第i 1 i m 層蛋糕是半徑為r...