nijiaben
BlogJava
首页
新随笔
新文章
联系
聚合
管理
posts - 15,comments - 65,trackbacks - 0
<
2009年5月
>
日
一
二
三
四
五
六
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(5)
给我留言
查看公开留言
查看私人留言
随笔档案
2013年4月 (1)
2010年6月 (1)
2010年4月 (1)
2009年9月 (3)
2009年7月 (2)
2009年5月 (3)
2009年4月 (4)
文章档案
2013年4月 (1)
blog
你假笨Flex&Java技术博客网
你假笨javaeye博客
搜索
最新评论
1. re: OsWorkflow工作流设计器flex版本终于完工了
楼主可以把源代码发给我研究下不?zhangjianxxl@tom.com感谢
--flex学者
2. re: Flex与java交互之数据库数据读取
刚问完,删掉remoting-config文件的adapter-definition元素的default="true" />里面的空格就好了@斦
--斦
3. re: Flex与java交互之数据库数据读取
我也是这样子的问题,不知最后是怎样解决的?@wl
--斦
4. re: OsWorkflow工作流设计器flex版本终于完工了
跪求源码,谢谢,a158abc@163.com
--jiewei
5. re: Flex与java交互之数据库数据读取[未登录]
按照以上代码,最终点击获取数据按钮后,直接error。请问是什么原因
--Eric
阅读排行榜
1. Flex与java交互之数据库数据读取(7770)
2. OsWorkflow工作流设计器flex版本终于完工了(6750)
3. jQuery选择器选择dom元素(5304)
4. dom4j在指定位置新增节点(3078)
5. 小议jQuery对象中的类数组操作(2387)
评论排行榜
1. OsWorkflow工作流设计器flex版本终于完工了(44)
2. Flex与java交互之数据库数据读取(14)
3. Flex版OSWorkflow界面展示(山寨版)(2)
4. dom4j在指定位置新增节点(1)
5. jQuery选择器选择dom元素(1)
装箱问题java实现
本文最先发表在本人的个人博客
http://www.lovestblog.cn
先把题目晒出来,这个题目不是很难,但是当时仅仅因为输出的问题折腾了我大半天,在ACM提供的运行环境中只有到最后才能把结果输出,不能在中途就把结果输出来,不然老师看见那红色的
Wrong Answer
,对于ACMER来说这是最不想看到的结果了,我们最喜欢看到蓝色的
Accepted
,呵呵,因为这样就说明你的程序通过了。
Description
一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由你来设计。
Input
输入文件包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空格隔开,分别为1*1至6*6这六种产品的数量。输入文件将以6个0组成的一行结尾。
Output
除了输入的最后一行6个0以外,输入文件里每一行对应着输出文件的一行,每一行输出一个整数代表对应的订单所需的最小包裹数。
Sample Input
0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0
Sample Output
2
1
这就是题目了,这是北大ACM在线答题中的一道题目,看了下那通过率为38%(3875/10153),即总共提交了10153次,答案完全正确的是3875次,高人还是蛮多的,所以我一般选择的题目都是难度在百分之三十多左右的,太难的我不敢做,有兴趣的可以去网站上看看http://poj.grids.cn/problemlist,注册个用户答答题也蛮有意思的,但是只提供你有限的测试数据,当然当你提交的时候就不是几组测试数据了,难度还是比较高的,稍不留神就通不过。
对于这道题我最初这么思考的,对于6*6的一个箱子来说,最多只能放一个6*6或一个5*5或4*4的盒子,所以我们初始化需要的箱子数时就是这这几种箱子的个数和,对于3*3的箱子来说,我们可以放一个或2个或3个或4个,这我们可以通过整除和取模来确定放了3*3盒子的箱子数,再把它加入到总箱子数中,接下来我们就是把1*1和2*2的盒子塞进前面所需的箱子中,当塞不完时再来新增盒子,我们首先要将前面的箱子剩余的空间统计出来,并且要以2*2的优先考虑,因为我们可以把多余的2*2的位置变为填充4个1*1的,毕竟1*1的只要有空间随处都可以塞。所以当我们的箱子要是装了1个5*5的盒子的话,那么它就只能塞1*1的了,一个可以塞11个1*1的,对于装了4*4的盒子的话,那么还可以装5个2*2的盒子,暂且不要去转话成1*1的,除非没办法只能装1*1的,对于3*3的话就可以根据取模之后一个箱子剩下的空间了,如果一个箱子中只放了一个3*3的,那么还剩下3个3*3的空间可以放,我们知道可以放5个2*2的和7个1*1的,对于放了2个3*3的箱子,我们剩下的空间可以放3个2*2的以及6个1*1的,对于放了3个3*3的箱子,我们只能放1个2*2的和5个1*1的,这样一来我们就统计出了此时可以放2*2以及1*1的空间到底有多少,接下来我们就放箱子进去啊,放一个就减一个,知道1*1的和2*2的盒子都放完了,要是还没有放完的话我们就新增箱子或者如果1*1的没放完,而2*2的还有剩,那么就将每个2*2的转化成4个1*1的就行了,具体实现就看下面的代码吧,由于时间关系,就没写注释了,要是哪里看不明白的,可以给我留言。
import
java.io.BufferedInputStream;
import
java.util.HashMap;
import
java.util.Map;
import
java.util.Scanner;
public
class
Test
{
public
static
void
main(String args[])
{
Scanner sc
=
new
Scanner(
new
BufferedInputStream(System.in));
boolean
flag
=
true
;
Map map
=
new
HashMap();
int
k
=
0
;
while
(flag)
{
int
n[]
=
new
int
[
6
];
n[
0
]
=
sc.nextInt();
n[
1
]
=
sc.nextInt();
n[
2
]
=
sc.nextInt();
n[
3
]
=
sc.nextInt();
n[
4
]
=
sc.nextInt();
n[
5
]
=
sc.nextInt();
if
(n[
0
]
==
0
&&
n[
1
]
==
0
&&
n[
2
]
==
0
&&
n[
3
]
==
0
&&
n[
4
]
==
0
&&
n[
5
]
==
0
)
{
flag
=
false
;
}
else
{
map.put(k, n);
k
++
;
}
}
for
(
int
i
=
0
;i
<
map.size();i
++
)
{
int
[] vs
=
(
int
[])map.get(i);
int
boxNum
=
0
;
boxNum
+=
vs[
3
]
+
vs[
4
]
+
vs[
5
];
if
(vs[
2
]
>
0
)
{
if
(vs[
2
]
%
4
==
0
)
{
boxNum
+=
vs[
2
]
/
4
;
}
else
{
boxNum
+=
vs[
2
]
/
4
+
1
;
}
}
int
for1
=
vs[
4
]
*
11
;
int
for2
=
vs[
3
]
*
5
;
if
(vs[
2
]
%
4
==
1
)
{
for1
+=
7
;
for2
+=
5
;
}
else
if
(vs[
2
]
%
4
==
2
)
{
for1
+=
6
;
for2
+=
3
;
}
else
if
(vs[
2
]
%
4
==
3
)
{
for1
+=
5
;
for2
+=
1
;
}
if
(vs[
0
]
<
for1)
{
vs[
0
]
=
0
;
}
else
{
vs[
0
]
=
vs[
0
]
-
for1;
}
if
(vs[
1
]
<
for2)
{
if
(vs[
0
]
>
0
)
{
if
(
4
*
(for2
-
vs[
1
])
-
vs[
0
]
>=
0
)
{
vs[
0
]
=
0
;
}
else
{
vs[
0
]
=
vs[
0
]
-
4
*
(for2
-
vs[
1
]);
}
}
vs[
1
]
=
0
;
}
else
{
vs[
1
]
=
vs[
1
]
-
for2;
}
if
(
!
(vs[
0
]
==
0
&&
vs[
1
]
==
0
))
{
if
(vs[
1
]
>
0
)
{
if
(vs[
1
]
%
9
==
0
)
{
boxNum
+=
vs[
1
]
/
9
;
}
else
{
boxNum
+=
vs[
1
]
/
9
+
1
;
if
(vs[
0
]
>
(
9
-
(vs[
1
]
%
9
))
*
4
)
{
if
((vs[
0
]
-
(
9
-
(vs[
1
]
%
9
))
*
4
)
%
36
==
0
)
{
boxNum
+=
(vs[
0
]
-
(
9
-
(vs[
1
]
%
9
))
*
4
)
/
36
;
}
else
{
boxNum
+=
(vs[
0
]
-
(
9
-
(vs[
1
]
%
9
))
*
4
)
/
36
+
1
;
}
}
}
}
else
if
(vs[
0
]
>
0
)
{
if
(vs[
0
]
%
36
==
0
)
{
boxNum
+=
vs[
0
]
/
36
;
}
else
{
boxNum
+=
vs[
0
]
/
36
+
1
;
}
}
}
System.out.println(boxNum);
}
}
}
posted on 2009-05-26 11:00
你假笨
阅读(1744)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理