1 条题解
-
0
思路
正整数半径高度逐层严格递减,体积恰好N,表面积包含底层顶部投影面积但不含最底底面;无解0。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; int n,m,best=INT_MAX,minv[21],mina[21];void dfs(int k,int v,int area,int rb,int hb){if(!k){if(!v)best=min(best,area);return;}if(v<minv[k]||area+mina[k]>=best||area+2*v/rb>=best)return;int maxr=min(rb-1,(int)sqrt((v-minv[k-1])/k));for(int r=maxr;r>=k;r--){int maxh=min(hb-1,(v-minv[k-1])/(r*r));for(int h=maxh;h>=k;h--){int extra=2*r*h+(k==m?r*r:0);if(area+extra<best)dfs(k-1,v-r*r*h,area+extra,r,h);}}}int main(){cin>>n>>m;for(int i=1;i<=20;i++){minv[i]=minv[i-1]+i*i*i;mina[i]=mina[i-1]+2*i*i;}if(minv[m]<=n)dfs(m,n,0,(int)sqrt(n)+1,n+1);cout<<(best==INT_MAX?0:best)<<'\n';}
- 1