华为OD机试-动态规划
文章平均质量分 73
动态规划
我不会起名字呀
这个作者很懒,什么都没留下…
展开
-
leetcode53.最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。输入:nums = [-2,1,-3,4,-1,2,1,-5,4]解释:连续子数组 [4,-1,2,1] 的和最大,为 6。输入:nums = [5,4,-1,7,8]子数组是数组中的一个连续部分。输入:nums = [1]原创 2024-09-14 20:00:06 · 346 阅读 · 0 评论 -
leetcode60.不同路径
这里要看一下递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。那么很自然,dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来。这样就可以保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值的。dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。原创 2024-08-29 21:21:41 · 753 阅读 · 0 评论 -
华为OD机试E卷-通过软盘拷贝文件[200分]
文件占用的软盘空间都是按块分配的,每个块大小为512个字节。有一名科学家想要从一台古董电脑中拷贝文件到自己的电脑中加以研究但此电脑除了有一个3.5寸软盘驱动器以外,没有任何手段可以将文件持贝出来,而且只有一张软盘可以使用,因此这一张软盘是唯一可以用来拷贝文件的载体。第2行到第N+1行(共N行),每行为一个整数,表示每个文件的大小 s,单位为字节.0 < i < N,0< s[i]< 1000000。小于存储当前物品所需的块数,则最大价值就是前一行的值(函数是解决问题的主要函数,它接受物品价值数组(原创 2024-08-29 14:00:41 · 1188 阅读 · 0 评论 -
华为OD机试E卷-充电设备
我们取这两种选择中的最大值,即 fmax(dp[i-1][j], dp[i-1][j-output[i]]+output[i])。dp[i][j] 表示前 i 个充电设备,总功率不超过 j 的最大输出功率。这是因为如果只有一个充电设备,且总功率不超过它的输出功率,那么最大输出功率就是它自己的输出功率。当充电设备输出功率50、20、20组合时,其输出功率总和为90,最接近充电站最大充电输出功率,因此最优元素为90。,那么最大输出功率就是不选择当前充电设备时的最大输出功率,即 dp[i-1][j]。原创 2024-08-28 20:00:58 · 638 阅读 · 0 评论 -
0-1背包问题
放物品i:由dp[i - 1][j - weight[i]]推出,dp[i - 1][j - weight[i]] 为背包容量为j - weight[i]的时候不放物品i的最大价值,那么dp[i - 1][j - weight[i]] + value[i] (物品i的价值),就是背包放物品i得到的最大价值。所以递归公式: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);那么可以有两个方向推出来dp[i][j],原创 2024-08-20 21:00:24 · 595 阅读 · 0 评论 -
leetcode70.爬楼梯
我们是从第 0 级开始爬的,所以从第 0 级爬到第 0 级我们可以看作只有一种方案,即 f(0)=1;我们不妨写几项来验证一下,根据转移方程得到 f(2)=2,f(3)=3,f(4)=5,……它意味着爬到第 x 级台阶的方案数是爬到第 x−1 级台阶的方案数和爬到第 x−2 级台阶的方案数的和。很好理解,因为每次只能爬 1 级或 2 级,所以 f(x) 只能从 f(x−1) 和 f(x−2) 转移过来,而这里要统计方案总数,我们就需要对这两项的贡献求和。3. 1 阶 + 1 阶 + 1 阶。原创 2024-08-19 23:44:37 · 265 阅读 · 0 评论 -
leetcode509.斐波那契数
由于 F(n) 只和 F(n−1) 与 F(n−2) 有关,因此可以使用「滚动数组思想」把空间复杂度优化成 O(1)。斐波那契数的边界条件是 F(0)=0 和 F(1)=1。F(n) = F(n - 1) + F(n - 2),其中 n > 1。解释:F(2) = F(1) + F(0) = 1 + 0 = 1。解释:F(3) = F(2) + F(1) = 1 + 1 = 2。解释:F(4) = F(3) + F(2) = 2 + 1 = 3。给定 n ,请计算 F(n)。原创 2024-08-18 01:50:02 · 335 阅读 · 0 评论