基本算法4.1堆积木

基本算法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;
}

AC

发布了50 篇原创文章 · 获赞 51 · 访问量 1386

猜你喜欢

转载自blog.csdn.net/m0_45682806/article/details/104051414