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派,表面积,体积都有派,都约下去,不用计算公式内

posted on 2016-12-12 15:28  霸王程  阅读(88)  评论(0编辑  收藏  举报