poj1190
#include<stdio.h> int N=100; int M=2; int s; int min=9999; void dangao(int ceng,int dangv,int h,int r) { if(s>min) return; if(dangv>N) return; if(ceng==M+1) { if(dangv==N) { if(min>s) { min=s;
} } return; } for(int rr=r;rr>0;rr--) { for(int hh=h;hh>0;hh--) { if(ceng==1) { s=rr*rr; } s=s+2*rr*hh; dangao(ceng+1,dangv+rr*rr*hh,hh-1,rr-1); s=s-2*rr*hh; } } } int main() { dangao(1,0,100,10); printf("%d",min); return 0; }
/*就是挨个试,递归函数的出口是蛋糕的层数,R和H的两从循环,因为题目介绍底下的蛋糕层H和R必须大于上层的H和R,所以假如第一层我选长度为H和R那末下一层就从H-1和R-1开始选,直到规定层数判断并跳出,两个减枝 1,if(s>min) return;
如果当前表面积已经大于min面积,return,不再搜索。2, if(dangv>N)return;如果当前体积大于N,return,不再搜索。
另外他说表面积体积都有派,不过V=N派,表面积,体积都有派,都约下去,不用计算公式内