晚上无聊的时候把以前的<程序员>杂志拿出来see see,于是就看到了这个算法题.这文章之前也看过,但当时稍微想了一下就溜过去了.今天看的时候突然产生了一些疑问,于是动手写了几行代码测试了下,结果发现文章中的说法并不完全対.
哦,讲了这么久,忘了说这个题在杂志的第65页的第二题.
注意:
原文并没有给出最优策略
的定义,我这儿根据原文的意思考虑的是这样一种策略:
给出一种策略,使得在最坏的情况下,测试的次数最少
下面是我写的代码:(动态规划算法,时间复杂度O(N^2))
java 代码
-
-
-
-
-
-
-
-
-
-
-
-
- import
java.util.*;
- public
class
Best{
-
private
static
Map map =
new
HashMap();
-
-
public
static
int
min(
int
n){
-
if
(n<
0
)
throw
new
IllegalArgumentException();
-
if
(n<=
1
)
return
0
;
- Integer s =map.get(n);
-
if
(s!=
null
)
return
s;
-
int
min =n;
-
for
(
int
i=
1
;i
-
int
t1 =
1
+ min(n-i);
-
int
t2 =t1>i?t1:i;
-
if
(min>t2) min =t2;
- }
- map.put(n,min);
-
return
min;
- }
-
private
static
List list =
new
LinkedList();
-
-
-
-
public
static
void
solve(
int
n){
-
if
(n<
0
)
throw
new
IllegalArgumentException();
-
if
(n<=
1
){
- ListIterator iter =list.listIterator();
-
if
(!iter.hasNext())
return
;
- System.out.print(iter.next());
-
while
(iter.hasNext()) System.out.print(
" -> "
+iter.next());
- System.out.println();
-
return
;
- }
-
int
min =min(n);
-
for
(
int
i=
1
;i<=n;i++){
-
int
t1 =
1
+min(n-i);
-
int
t2 =i>t1?i:t1;
-
if
(t2==min){
- list.add(i);
- solve(n-i);
- list.remove(list.size()-
1
);
- }
- }
- }
-
public
static
void
main(String[] args){
- System.out.println(
"Min :"
+min(
100
));
- solve(
100
);
- }
- }
运行程序可以看出,对于n=100的情形,存在很多种最优策略,第一次测试选择的楼层可以是从8到14的任意一层.
ps:贴上去的代码有点走样,请下载附件
分享到:
相关推荐
《程序员面试经典算法题》是针对程序员在面试过程中可能会遇到的算法问题进行深入解析的一份资源。这份资料旨在帮助程序员提升算法思维,从而在技术面试中脱颖而出。通过学习和掌握这些经典算法,不仅可以提高编程...
《程序员的算法趣题》是一本专门为IT从业者和有志于进入这个领域的学习者准备的算法书籍。它通过一系列有趣且富有挑战性的题目,旨在帮助读者深入理解和掌握计算机科学中的核心算法,提升解决实际问题的能力。这本书...
《程序员算法趣题——随书源码》是一个与算法相关的学习资源,包含了增井敏克著作《程序员算法趣题》中的实例代码。增井敏克是算法领域知名的专家,他的书籍通常深入浅出,旨在帮助程序员提升算法思维和解决实际问题...
【标题】"2007年5月程序员试题标准答案.rar"揭示了这是一份针对2007年中国软件技术资格考试(软考)程序员级别的试题及官方标准答案的资料集合。软考是中国计算机技术与软件专业技术资格(水平)考试,旨在测试考生...
综上所述,2007年上半年程序员考试下午场试题涵盖了数据结构与算法、面向对象编程、数据库设计等多个方面的重要知识点。通过深入学习这些核心概念和技术,不仅能够帮助考生顺利通过考试,更重要的是能够提升自身的...
本资源"程序员算法大全算法数据结构智力题"显然是为了帮助程序员提升在这两个关键领域的理解与技能。 算法可以看作是解决问题或执行任务的精确步骤,它们决定了计算机程序如何处理信息。在编程中,我们常常会遇到...
程序员面试智力、算法题汇总一.pdf,这是一份不错的文件
根据提供的标题“程序员2009上半年下午试题及答案”以及描述中的信息“程序员2009上半年下午试题及答案,解答和详细,还有其他,要的联系我”,我们可以推测这份文档包含了2009年上半年程序员资格考试下午场的试题及其...
这些历年程序员考试试题涵盖了2007年5月至2008年11月期间的考试内容,旨在帮助备考者了解当时的考试趋势、重点及常见题型。在这段时间内,程序员考试通常会测试应试者的计算机基础知识、编程能力、算法理解、软件...
【标题】"2007年上半年 程序员 上午试卷 及 答案"涉及的是2007年全国计算机技术与软件专业技术资格(水平)考试中程序员级别的上午理论部分。这类考试通常包括计算机基础知识、编程语言、数据结构、算法分析、操作...
在IT行业中,算法是程序员解决问题的关键工具,它们是编程的基础,能够帮助我们高效地处理数据和执行任务。本文档集合中的四个PHP文档深入探讨了程序员应掌握的一些经典算法,这对于提升编程技能至关重要。 首先,...
《程序员电子刊》2007年2月刊是一本专注于IT技术和行业的专业杂志,它为当时的程序员和科技爱好者提供了丰富的技术资讯、行业动态以及深度分析。这份刊物在那个年代对于推动中国IT行业发展起到了积极的作用,是许多...
Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法集题大全Java算法...
程序员笔试常考算法题 嵌入式程序员,C程序员,JAVA程序员值得参考
本书是一本解谜式的趣味算法书,从实际应用出发,通过趣味谜题的解谜过程, 引导读者在愉悦中提升思维能力、掌握算法精髓。此外,本书作者在谜题解答上,通 过算法的关键原理讲解,从思维细节入手,发掘启发性算法新...
在IT行业中,算法是程序员的核心技能之一,它们是解决问题和设计高效程序的基础。"程序员实用算法.zip"这个压缩包很可能包含了一系列与编程相关的算法实现、解释或案例,旨在帮助程序员提升这方面的能力。以下是对...
"程序员算法题源代码"这个压缩包文件很可能包含了众多经典的算法实现,旨在帮助程序员巩固和提高算法水平。 一、排序算法 排序算法是计算机科学中最基础且广泛使用的算法之一,包括冒泡排序、插入排序、选择排序、...
2007年上半年程序员考试是针对计算机编程技术的一次专业评估,旨在测试考生对编程基础知识、算法理解、数据结构掌握、软件工程实践以及问题解决能力等多方面的技能。这次考试的试题与标准答案提供了宝贵的复习资源,...
标题和描述提及的是"2007年上半年程序员考试上午试题",这显然指的是中国计算机技术职业资格认证中的一项考试,通常包括了计算机编程、软件工程、数据结构、算法分析等多个IT领域的知识。这个考试是评估程序员基础...