动态规划
杨戬没有你我怎么活
喜欢的人是杨戬!
展开
-
剑指 Offer 60. n个骰子的点数
题目 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。 思路 这道题是老dp了。首先,为什么会想到dp呢?这道题明显只有两个变量,一个是骰子的数量,一个就是n个骰子所可以组成的数。明显我们需要求出所有的子问题,才可能知道答案。那么,确认了问题之后,我们开始划分模型,前n个骰子和前n-1个骰子之间的联系是什么呢?我们很容易可以想到是增加1-6。原创 2020-10-30 10:28:50 · 90 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和
文章目录题目示例1:提示:题解: 题目 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 示例1: 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 提示: 1 <= arr.length <= 10^5 -100 <= arr[i] <= 100 题解: 这道题关键在于定义状态,是一道dp的题目。我原创 2020-06-24 11:52:46 · 153 阅读 · 0 评论 -
剑指 Offer 14- I. 剪绳子(双解法,DP+数论)
题目: 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1 示例 2: 输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 ×原创 2020-06-23 17:36:14 · 188 阅读 · 0 评论 -
剑指 Offer 47. 礼物的最大价值
题目 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 12 解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物 题解 这道题是个简单的贪心 class Solution { public: int m原创 2020-06-21 10:33:05 · 76 阅读 · 0 评论 -
leetcode 309
题目: 给定一个整数数组,其中第i个元素代表了第i天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 示例: 输入: [1,2,3,0,2] 输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出] 题解: 这道题的难度就在于想出它一共有三种状态,...原创 2020-06-16 17:40:05 · 174 阅读 · 0 评论 -
leetcode 322 (动态规划)
题目: 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。 示例1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2: 输入: coins = [2], amount = 3 输出: -1 说明: 你可以认为每种硬币的数量是无限的。 题解: 这个题目只有amount一...原创 2020-06-16 16:15:12 · 564 阅读 · 0 评论 -
leetcode 474
题目: 难度中等163 在计算机界中,我们总是追求用有限的资源获取最大的收益。 现在,假设你分别支配着m个0和n个1。另外,还有一个仅包含0和1字符串的数组。 你的任务是使用给定的m个0和n个1,找到能拼出存在于数组中的字符串的最大数量。每个0和1至多被使用一次。 注意: 给定0和1的数量都不会超过100。 给定字符串数组的长度不会超过600。 示例 1: 输入: Array = {"10", "0001", "111001", "...原创 2020-06-16 11:38:42 · 262 阅读 · 0 评论