POJ 1190 生日蛋糕

来源:互联网 发布:淘宝登录不上怎么找回 编辑:程序博客网 时间:2024/05/18 03:51
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int maxm=1e4+10;const int inf=1<<29;int mins[maxm],minv[maxm];int n,m;int bests;void dfs(int s,int v,int level,int r,int h){    if(level==0)    {        if(v==n&&s<bests)            bests=s;        return;    }    if(s+mins[level-1]>bests||v+minv[level-1]>n||2*(n-v)/r+s>=bests)//2*(n-v)/r表示圆柱的侧面积        return;    for(int i=r-1;i>=level;i--)    {        if(level==m)            s=i*i;        int hh=min((n-v-minv[level-1])/(i*i),h-1);        for(int j=hh;j>=level;j--)            dfs(s+2*i*j,v+i*i*j,level-1,i,j);    }}int main(){    mins[0]=0;    minv[0]=0;    for(int i=1;i<=20;i++)    {        for(int j=1;j<=20;j++)        {            mins[i]=mins[i-1]+2*i*i;//表示第i层圆柱的侧面积之和            minv[i]=minv[i-1]+i*i*i;//表示第i层圆柱的体积之和        }    }    while(scanf("%d%d",&n,&m)!=EOF)    {        bests=inf;        dfs(0,0,m,n+1,n+1);        if(bests==inf)        {            printf("0\n");        }        else        {            printf("%d\n",bests);        }    }    return 0;}

0 0
原创粉丝点击