【枚举优化】poj2363 Blocks

传送门:poj2363


题目大意:有N个1*1*1的方块,放到一个立方体的盒子里面,求盒子的最小的表面积。


坑爹的题目……想多了,绕远了……


一开始以为意思是放到一个立方体盒子里面,求盒子的最小表面积,在那里找合理的构造方法把我蛋疼得……

后来仔细读题是把这些方块堆成立方体……卧槽……简直跪烂了……


然后又因为最近数论搞多了,就自然地想到把N进行整数拆分,将其因子组合成立方体的三维,求出其中最小的一个表面积。

根据数学知识,V相同的情况下,三维越接近应该S越小,正方体时S最小,于是就以N^1/3为标准开始组合边长……折腾了好久一直跪……


最后怒了……直接开暴力,枚举三维,N^3,不能接受。

因为边长c=n/a/b,省略一维,N^2,由于多case,悬。

又因为a*b<n,再省一部分,N^1.5,妥妥过了。

最后枚举    for (int i=1;i<=n;i++)  for (int j=1;i*j<=n;j++)

然后问题就解决了……


这个悲伤的故事需要检讨……惯性思维太重了……水题就不该想多了……

另外注意Hint,用scanf和printf输入输出。


#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int main(){
    int t;
    scanf("%d",&t);
    while (t--){
        int n;
        scanf("%d",&n);

        int min=0x7f7f7f7f;
        for (int i=1;i<=n;i++){
            for (int j=1;i*j<=n;j++){
                if (n%(i*j)!=0) continue;
                int k=n/(i*j);
                int s=2*i*j+2*i*k+2*j*k;

                if (s<min) min=s;
            }
        }

        printf("%d\n",min);
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值