摘要: 一.题目给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0] * k[1]*…*k[m]可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。二.思路我们首先看一下该问题是否符合动态规划的4个特征:求一个问题的最优解整体问题的最优解依赖于各个子问题的最优解... 阅读全文
posted @ 2018-11-01 18:46 OVS98 阅读(276) 评论(0) 推荐(0)
摘要: 一.题目地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动,它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。但它不能进入方格(35, 38),因为3+5+3+8=19。请问该机器人能够到达多少个格子?二.思路典型的回溯法可以解决的问题,不过加了一些子函数去做一些... 阅读全文
posted @ 2018-11-01 11:14 OVS98 阅读(187) 评论(0) 推荐(0)
摘要: 一.题目请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中间向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。二.思路这是一个可以用回朔法解决的典型题。首先,在矩阵中任选一个格子作为路径的起点。假设矩阵中某个格子的字符为ch,那么这个格子不可能处在路径上的第i个位置。如果路径上的第i个字... 阅读全文
posted @ 2018-11-01 10:47 OVS98 阅读(301) 评论(0) 推荐(0)
摘要: 一.题目把一个数组最开始的若干元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{ 3, 4, 5, 1, 2 }为{ 1, 2, 3, 4, 5 }的一个旋转,该数组的最小值为1。二.思路由于原始数组是递增排序的数组,我们可以发现旋转之后的数组仍然可以分为两个递增排序的子数组,而且前一个子数组中的任意一个元素都要大于后面子数组中的元素,... 阅读全文
posted @ 2018-11-01 09:47 OVS98 阅读(96) 评论(0) 推荐(0)