腾讯笔试题思路

问题1:

有一个n*m的迷宫,有两种地块,’*’表示该地块走过2次以后会被破坏,’x’表示该地块走过1次后就被破坏,无法行走到被破坏的地块。左上角坐标为(1,1),右下角坐标为(n,m),每一次必须向上下左右四个方向之一走一步(不能原地停留)。给定起点和终点,问能否从起点走到终点并且使终点恰好被破坏。

•输入:

数据组数t

n m

n行迷宫

起点坐标

终点坐标

•输出:YES或者NO

•数据范围:t<=10,0<=n,m<=500


思路:

由题目可知只有‘*’和‘x'两种地块,也就是说从起点到终点一定有一条路可以走一边。则问题转换成了如何让终点一定被破坏。

分情况讨论:

1、终点为‘x'。则走一次就会被破坏,满足题目要求。

2、终点为’*’,则需要找一条路可以从终点走到终点。此时终点正好被走了两次。即从终点出发,是否有一条路,可以从终点走到终点。

讨论不能从终点走到终点的情况:

1、迷宫只有一行或一列,起点和终点都在这一行和一列上,此时没有路,输出‘NO'

2、除此之外都有路,输出‘YES'。

解题关键:

读懂题目的意思,可以简化思路。如此题从终点开始思考便很简单啦。


问题2:

•冰激凌由n种材料组成,每制作一份冰激凌需要每种材料各一份。每种材料单价为Vi元,现在小明手上每种材料有Wi份,且有M元。问小明最多做多少份冰激凌。

•1<=n<=100,1<=m<=1e12

•0<=Wi<=1e12

•1<=vi<=100


思路:

求最大化或最小化问题,可以转换成求是否的问题。

要满足以下条件:

问题的答案是单调的(如此题,小明如果可以做n份,那小明也可以做n-1份)

问题转变成求区间(a,b)找到小明可以做出和不可以做出的分界线mid

即是一个二分搜索的问题,每次判断isOK(mid)即小明可不可以做mid份冰淇淋。

解题关键:

原问题的转换,最大最小问题转变成是否问题。


问题3:

•n行,但固定只有3列,从第一行任意位置走到最后一行任意位置,每一次可以向下,左下,右下走。如果走到的格子为0,则当前分数取相反数。问分数最高多少分

•格子内的数值w,-10000<=w<=10000,1<=n<=10000


思路:

动态规划问题。

用两个二维数组dp1,dp2分别保存当前位置的最大值和最小值。

如果遇到0,最小值就有了变为最大值的可能性,同理最大值。


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 13,748评论 0 89
  • One 1 the [ðə, ði:] art.这,那 ad.[用于比较级;最高级前] 2 be [bi:,bi]...
    梁培林阅读 9,406评论 0 10
  • 一切物品价值在于使用
    三人成队阅读 115评论 0 0
  • 高中生的晚自习下课很晚接孩子的家长总会提前大车小车先到后安无人指挥的马路边停放次序坚守井然望子成才的家长用自律和孩...
    金启阅读 249评论 0 2
  • 在这个世界上,最简单的,才是最难做到的 简单的事情重复做,重复的事情用心做~ 一直持续,就是最了不起的!
    Jessie_cyy阅读 764评论 7 7