基本算法4.1堆积木
题目描述
小明的侄子要过生日了,小明买了一套儿童积木送他。这套积木由N个边长为1厘米的正方体小块
组成,小明想把这些小块堆成一个大的矩形方体,然后将整个方体包裹上漂亮的包装纸,请问小
明最少需要多少平方厘米的包装纸即可?
输入
输入的第一行为一个正整数C,表示测试样例的组数。
每组输入是一个正整数N(1<=N<=1000),表示积木块的个数。
输出
对于每组输入,输出将整个方体完全包裹上包装纸所需要的包装纸的最小面积。
样例输入
5
9
10
26
27
100
样例输出
30
34
82
54
130
题解:
可以枚举矩形的长宽高,求最小面积。
源代码:
#include<bits/stdc++.h>
using namespace std;
#define MAXD 1010
int v[MAXD][MAXD],n,maxx,t;
int w(int x,int y,int z) {
return (x*(y+z)+y*z)*2;
}
void fuke(int x,int y,int z) {
if(w(x,y,z)<maxx) maxx=w(x,y,z);
for(int i=x; i<=n; i++) {
if(n%i==0) {
for(int j=1; j<n; j++) {
if(i*j<=n) {
if(n%(i*j)==0) {
int t=n/(i*j);
if(!v[i][j]) {
v[i][j]=1;
v[j][i]=1;
fuke(i,j,t);
}
}
}
}
}
}
return;
}
int main() {
scanf("%d",&t);
while(t--) {
scanf("%d",&n);
maxx=0x7ffffff;
memset(v,0,sizeof(v));
v[1][1]=1;
fuke(1,1,n);
printf("%d\n",maxx);
}
return 0;
}