
#include<iostream>
#include<math.h>
using namespace std;
int N,M; //蛋糕的體積和層數
int minS = 1<<30; //求得蛋糕的最小面積
int N1;
//求面積
//求第m層的體積
void DFS(int m,int V,int S,int r,int h) //r,h表示第m層的半徑和高度
{
int i,j;
if(m>1)
{
int s1,v1,v2;
s1 = 0;
v1 = 0;
v2 = 0;
for(i=1; i<=N-m+1;i++)
{
s1 = 2*i*i+s1;
v1 = v1 + i*i*i;
v2 = v2+(r-i+1)*(r-i+1)*(h-i+1);
}
if(V+v1 > M || V+v2<M || S+s1>minS)
return ;
}
if(m == N)
{
for(i=r;i>N-m;i--)
{
if(V+i*i>M || S+2*i>minS)
continue;
for(j = h; j>N-m;j--)
{
if(V+i*i*j==M && S+2*i*j<minS)
minS = S+2*i*j;
}
}
return;
}
for(i=r; i>N-m;i--)
{
if(m == 1)
S = i*i;
if(V+i*i > M || S+2*i>minS)
continue;
for(j = h; j>N-m;j--)
{
if(V+i*i*j<=M && S+2*i*j<minS)
{
DFS(m+1,V+i*i*j,S+2*i*j,i-1,j-1);
}
}
}
}
int main()
{
cin>>M>>N;
int i,j;
DFS(1,0,0,M,M);
if(minS == 1<<30)
cout<<0<<endl;
else
cout<<minS<<endl;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/154406.html
標籤:C++ 語言
下一篇:用選擇法排序
