`
蓝调爵士1224
  • 浏览: 7014 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

【转】抛鸡蛋(玻璃球或围棋)

阅读更多

 

题目:一个100层的大厦,你手中有两个相同的鸡蛋(玻璃球或围棋)。从这个大厦的某一层扔下鸡蛋((玻璃球或围棋))就会碎,用你手中的这两个鸡蛋(玻璃球或围棋),找出一个最优的策略,来得知那个临界层面。

分析:这道题比较直观的想法是通过二分来寻找,但是二分的解法应该不是最优的。这里讨论通过动态规划的思路来求解。这里的最优策略指的是在这种策略下无论哪个临界层面在第几层,测试的次数都最少。设F(n,k)为用k个玻璃球来测试n层大厦的临界层的最少次数,状态转移方程如下:
F(n,k)=min{max{F(r,k-1), F(n-r,k)}+1, 1<=r<=n},边界条件:F(n,1)=n-1, F(1,k)=F(0,k)=0
状态转移方程可以这样来考虑,假设在n层楼中的第r层抛一次(对应方程中的"+1"),会有两种情况发生:

  • (1)玻璃球碎,说明在第1到第r层楼中必有一层为临界层,问题转化为一个子问题:求F(r,k-1)
  • (2)玻璃球不碎,说明临界层在第r+1层到第n层这n-r层楼中,问题转化为子问题:求F(n-r,k)

因为考虑的是最坏情况下抛球策略的所需测试次数的最小值,所以取这两种情况中的较大值,并遍历每一个可能的r,取其最小值即得到F(n,k)。实现代码如下:

 

#define MAX_FLOOR 512  
#define MAX_BALL  100  
  
int dp(int n, int k)  
{  
    if(k<1 || n<1) return -1;      
  
    if(k==1) return n-1;  
    if(n==1) return 0;  
  
    int M[MAX_BALL][MAX_FLOOR];  
    int i,j,r;  
    int temp, min;  
  
    for(i=0;i<=k;i++) M[i][0]=M[i][1]=0;    //F(1,k)=F(0,k)=0  
    for(j=2;j<=n;j++) M[1][j]=j-1;            //F(n,1)=n-1  
  
    /* 
        状态转移方程: 
        F(n,k)=min{max{F(r,k-1)+1, F(n-r,k)+1}, 1<=r<=n} 
    */  
    for(i=2;i<=k;i++)  
        for(j=2;j<=n;j++)  
        {  
            min = numeric_limits<int>::max();  
            for(r=1;r<=j;r++)  
            {  
                temp = max(M[i-1][r], M[i][j-r])+1;  
                if(temp<min)  
                    min = temp;  
            }  
            M[i][j] = min;  
        }  
  
    return M[k][n];//F(n,k)  
}  

 

 

  转载自程序员面试之家

 

 

分享到:
评论

相关推荐

    Unity开发围棋源码(04是围棋)_unity围棋_围棋_Unity围棋

    在Unity游戏引擎中进行围棋应用的开发是一项技术性较强的工作,涉及到编程语言C#、Unity引擎的使用以及人工智能算法的应用。本项目是一个基于Unity的围棋游戏源码,主要亮点在于实现了围棋的提子算法,这对于游戏...

    不围棋,不围棋算法,C,C++

    "不围棋"是一款基于C或C++编程语言开发的围棋软件。从标题和描述中可以看出,这个项目可能是一个命令行接口的应用程序,而非拥有图形用户界面(GUI)的版本。这意味着用户将通过输入命令来执行游戏的各种操作,如...

    围棋AI-银星围棋17,完美支持win10

    围棋,这一古老而又充满智慧的游戏,自古以来就以深邃的策略和无限的可能性吸引着无数爱好者。随着科技的发展,人工智能(AI)技术的应用为这一古老游戏注入了新的活力。今天,我们要探讨的正是这样一款将人工智能...

    围棋源码.rar_人机 围棋_围棋_围棋 聊天 人机对战_源码研究

    研究目标、研究内容和...经过对围棋对弈软件的分析,基本确定围棋对弈系统的研究目标为: 该系统功能包括:人机围棋对弈功能,局域网围棋对弈功能,局域网对弈时聊天功能,对弈中悔棋功能,求和功能及其他扩展功能等。

    围棋段位测试6000题

    围棋,源于中国古代,是一种策略性两人对弈的棋类游戏,被誉为棋类的最高智慧体现。在围棋中,段位是对玩家水平的一种评价系统,它反映了玩家在围棋领域的技巧和理解程度。本资源"围棋段位测试6000题"旨在帮助玩家...

    围棋入门一月通 围棋

    围棋,这个起源于中国古代的智力游戏,已经历了数千年的发展历史,它不仅是一种游戏,更是一种文化的传承与智慧的体现。每一场围棋对弈都如同一场战略布局与心理博弈的较量,每一步棋都蕴含着深奥的哲理和精妙的策略...

    天顶围棋 zen7

    "天顶围棋 Zen7":业余与专业围棋的桥梁 围棋,作为一项古老而深奥的游戏,不仅考验着玩家的智力与策略,还蕴含着丰富的文化内涵。在当今时代,随着人工智能技术的不断进步,围棋对弈软件已成为爱好者们磨练技艺、...

    围棋(中国围棋协会培训中心指定教材)第一册

    围棋,源于中国古代,是一种策略性两人对弈的棋类游戏,被誉为“智慧的体操”。中国围棋协会培训中心是推广和普及围棋教育的重要机构,其指定教材为围棋爱好者和学习者提供了系统的指导。本教材“围棋(中国围棋协会...

    围棋(中国围棋协会培训中心指定教材第二册)

    围棋作为中国传统文化中的瑰宝,它的智慧和艺术对于中华民族而言具有深远的历史意义和文化价值。...围棋教材的编写与出版是这一进程中不可或缺的重要环节,它为围棋文化的传播提供了系统的知识体系和教学资源。

    Python围棋源代码,默认为围棋九路玩法,可选择围棋十三和十九路玩法,基于tkinter,可悔棋。

    在本项目中,我们探讨的是一个使用Python编程语言开发的围棋小游戏。这个游戏具有灵活的棋盘大小选择,包括九路、十三路和十九路棋盘,这是围棋的常见规格。它利用了Python的Tkinter库来创建用户界面,提供直观且...

    Unity围棋项目源码

    在本项目"Unity围棋项目源码"中,开发者提供了一个实现围棋游戏逻辑的基础框架,这对于想要学习游戏编程或者对棋类游戏开发感兴趣的人员来说是一个很好的学习资源。 首先,我们要理解围棋的基本规则。围棋是一种...

    天顶围棋6中文绿色

    作为一款绿色软件,天顶围棋6在下载和安装过程中不会携带任何广告或插件,避免了不必要的干扰,保护了用户的电脑系统。同时,它的轻量级特性使得软件运行流畅,占用资源少,用户体验更佳。 五、综合训练,提升棋力 ...

    围棋-Python源码

    创建棋盘:使用二维数组或矩阵表示围棋的棋盘。可以根据游戏规则确定棋盘的大小,通常是19x19个交叉点。 定义玩家和空点:使用常量或枚举类型来定义两个玩家(黑棋和白棋)以及空点。 初始化棋盘:将棋盘上的所有...

    围棋对弈小程序

    【围棋对弈小程序】是一款专为初学者设计的围棋学习工具,它采用了Java语言开发,并且可以在Eclipse环境中运行。程序以Applet的形式展现,这使得用户可以直接在浏览器上进行围棋对弈,无需安装额外的应用程序。对于...

    网上围棋单机版

    项目的文件名“围棋单机版”很可能包含了实现这个游戏的所有源代码文件,包括JavaScript文件(可能有单独的围棋类文件和界面控制文件)、SVG定义文件以及可能的样式表(CSS)和资源文件(如图标或图片)。...

    围棋教育学校的得力围棋助手

    围棋教育学校在教学过程中,经常会使用到各种辅助工具来提升教学质量,使学生更好地理解和掌握围棋这一深奥的策略游戏。"围棋教育学校的得力围棋助手"便是这样一款专为围棋教学设计的应用软件,旨在帮助教师生动、...

    围棋_labview_围棋_

    在这个特定的项目中,标题"围棋_labview_围棋_"表明我们将探讨如何利用LabVIEW来开发一个围棋游戏。这个项目可能是为了帮助用户在休闲时间锻炼思维,同时也为LabVIEW程序员提供了一个有趣的实践平台。 首先,我们要...

    web围棋代码 围棋代码

    web围棋代码希望对大家有用

    开源围棋fuego代码

    在实际应用中,Fuego可以与各种围棋界面或服务器对接,实现人机对战或机器之间的比赛。同时,通过与不同围棋AI的对弈,Fuego能够持续学习和进化,不断提升自己的水平。 总的来说,开源围棋软件Fuego代表了现代...

    毕设论文:电脑围棋的研究与发展

    ### 电脑围棋的研究与发展 #### 重要知识点概览 1. **电脑围棋的定义与重要性**:电脑...未来,随着算法的不断优化和计算能力的提升,电脑围棋有望在围棋竞技中展现出更高的智慧,甚至达到或超越人类顶尖棋手的水平。

Global site tag (gtag.js) - Google Analytics