BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #81618同步于 2014/8/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求好心的学长学姐帮忙。代码一直wrong answer

ywg557
2014/8/19镜像同步11 回复
http://poj.org/problem?id=3536 这是poj3536 的一道水题。不知道问题出在哪里 简单来说就是 已知体积,求a,b,c.令得到最小表面积 题目翻译为 啤酒爱好者俱乐部定期聚会。他们恨温暖的啤酒,但俱乐部的冰箱太小,储存足够的啤酒的整个公司。所以他们决定以一种特殊的超级大啤酒的冰箱。新的冰箱应该是一个平行六面体一×B×C和商店恰好n立方体的1×1×1啤酒箱(俱乐部有N个成员)。为了减少损失,冷,冰箱的表面的总面积应尽可能小。 例如,如果冰箱的容量必须是12,可能的变体: 维度表面积 3 2 2 32×× 4 3 1 38×× 6 2 1 40×× 12 1 1 50×× 在这种情况下最好的变种是3×2×2。 帮助啤酒爱好者寻找他们的新冰箱的最佳尺寸。 输入 输入文件包含整数N(1≤N≤106)-冰箱的能力。帮助啤酒爱好者寻找他们的新冰箱的最佳尺寸。 输出 输出三个整数:A,B和C -冰箱的最佳尺寸。如果有几个方案,输出任何人。 #include <iostream> using namespace std; int main() { int n,count=0,a[2000]; int x,y,z; int sarea,min=1000000; for(int i=1;i<=n;i++) if(n%i==0) a[count++]=i; for(int i=0;i<count;i++) for(int j=0;j<count;j++) for(int k=0;k<count;k++) if(a[i]*a[j]*a[k]==n) { sarea=(a[i]*a[j]+a[i]*a[k]+a[j]*a[k])*2; if(sum<min) { min=sarea; x=a[i];y=a[j];z=a[k]; } } cout<<x<<" "<<y<<" "<<z<<endl; return 0; }
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
deng0515001机器人#1 · 2014/8/19
远远看去,满满的都是for,这样不超时么
gdl机器人#2 · 2014/8/19
算法版块问问,那边算法人多
zj40n机器人#3 · 2014/8/19
只枚举2个数就行。还有要剪枝。3 2 2算一组解 232 223 应该也算吧
caiyulun机器人#4 · 2014/8/19
你的min太小了,调大点就行了,我改成1000000000就AC了,亲测。
ywg557机器人#5 · 2014/8/20
【 在 deng0515001 的大作中提到: 】 : 远远看去,满满的都是for,这样不超时么 不超时,毕竟剪过一次枝,求了 它的因子。 第一次傻傻的没剪枝,严重超时
ywg557机器人#6 · 2014/8/20
【 在 gdl 的大作中提到: 】 : 算法版块问问,那边算法人多 好的,谢谢。
ywg557机器人#7 · 2014/8/20
【 在 zj40n 的大作中提到: 】 : 只枚举2个数就行。还有要剪枝。3 2 2算一组解 232 223 应该也算吧 这题目有多解,随便输出一个即可
ywg557机器人#8 · 2014/8/20
【 在 caiyulun 的大作中提到: 】 : 你的min太小了,调大点就行了,我改成1000000000就AC了,亲测。 难道人品差,依旧wrong answer
caiyulun机器人#9 · 2014/8/20
不可能啊,你看看 Source Code Problem: 3536 User: caiyulun Memory: 728K Time: 250MS Language: G++ Result: Accepted Source Code #include <iostream> using namespace std; int main() { int n,count=0,a[2000]; int x,y,z; int sarea,min=1000000000; cin>>n; for(int i=1;i<=n;i++) if(n%i==0) a[count++]=i; for(int i=0;i<count;i++) for(int j=0;j<count;j++) for(int k=0;k<count;k++) if(a[i]*a[j]*a[k]==n) { sarea=(a[i]*a[j]+a[i]*a[k]+a[j]*a[k])*2; if(sarea<min) { min=sarea; x=a[i];y=a[j];z=a[k]; } } cout<<x<<" "<<y<<" "<<z<<endl; return 0; } 【 在 ywg557 的大作中提到: 】 : 难道人品差,依旧wrong answer