POJ1190

来源:互联网 发布:vray网络渲染设置 编辑:程序博客网 时间:2024/06/05 00:52

初次写这题,写得不是很完美,请大家不要吐槽~~~~~~

#include <cmath>#include <cstdio>const int inf=2147483647;int minv[21],ri[21],hi[21],n,m ;int ans ;int dfs (int n,int v,int s,int maxr,int maxh){    int res;    int i,tr,th,ts;    if(n>m){        if(v==n && s+ri[1]*ri[1]<ans){            ans=s+ri[1]*ri[1];                return 1 ;        }    }    for(ri[n]=maxr-1 ; ri[n]>=m-n+1 ; ri[n]--){        res=2.0*(n-v)/ri[n]+ri[1]*ri[1] ;        if(res+s>=ans)continue ;        for(hi[n]=maxh-1 ; hi[n]>=m-n+1 ; hi[n]--){            if (v+ri[n]*ri[n]*hi[n]+minv[m-n]>n)continue ;            tr=ri[n];th=hi[n];ts=0;            for(i=n;i<=m;i++){                ts+=tr*tr*th ;                tr--;th--;            }            if(v+ts<n)continue ;            dfs(n+1,v+ri[n]*ri[n]*hi[n],s+2*ri[n]*hi[n],ri[n],hi[n]) ;        }    }    return 1 ;}int main(){    int tv,tr,th,i,j,k,m,n;    tv=0;    for(i=1;i<21;i++){tv+=i*i*i;        minv[i]=tv;    }    scanf("%d%d",&n,&m);    ans=inf;    tv=n-minv[m-1];    if(tv>0){        tr=sqrt(1.0*tv/m)+1;        th=1.0*tv/(m*m)+1;        dfs(1,0,0,tr,th);    }    if(ans==inf){        ans=0;    }    printf("%d\n",ans);    return 0;}


0 0