dp
dongcl97
这个作者很懒,什么都没留下…
展开
-
LeetCode 221. Maximal Square C++
Problem题目链接Solution题意为给定一个二维数组,其中元素都有0和1组成,找到最大的正方形(其中元素都为1)算出其面积定义二维数组dp,其中dp[i][j]的含义是,以(i,j)这个位置为右下角的正方形边长那么考虑dp[i][j]怎么求dp[i-1][j-1]代表以(i-1,j-1)为右下角的最大正方形边长那么若要把(i,j)接在(i-1,j-1)之后组成一个更大的正方形首先(i,j)这个位置必须是元素1其次(i,j)要能和(i-1,j-1)组成新正方形,那么要考虑这个新正方形原创 2020-05-24 22:44:28 · 126 阅读 · 0 评论 -
LeetCode 1025. Divisor Game C++
Problem题目链接Solution题意为,Alice和bob玩一个游戏,给定一个数字N,每个人从(0,N)这个区间选出一个能整除N的因子x(N%x==0),然后N替换为N-x,换一个选手重复这个过程,谁无法重复这个过程了谁就输了。alice先手。这道题我最初的做法就是列了前9次游戏的可能性,发现如果初始的N是偶数,就是alice赢,初始的N是奇数,就是bob赢。class Solution {public: bool divisorGame(int N) { retu原创 2020-05-11 10:40:47 · 463 阅读 · 1 评论 -
LeetCode 198 LeetCode 213 LeetCode 337 House Robber 系列
Problem题目链接:House RobberHouse Robber IIHouse Robber IIISolution三题的背景都一样:有一些房子,每幢房子有一定价值,一个强盗去抢劫这些房子,抢劫了某个房子就能获得对应价值,不过这些房子按照一定的规则相连,强盗不能把直接相邻的两个房子都抢劫了,否则会触发警报,问你强盗最多能抢到多少钱。该系列的第一题,这些房子就是按照直线排列的设房子编号为1-n,定义dp[i]为从1-i号房最多能抢多少钱对于第i个房子,有两种策略,抢或不抢若不抢,原创 2020-05-10 15:14:27 · 134 阅读 · 0 评论 -
LeetCode 312. Burst Balloons C++
Problem题目链接Solution此题题意为,给你n个气球,气球上有数字,你可以任意戳破第i个气球,你就会得到nums[i-1] * nums[i] * nums[i+1] 个硬币,然后第i个气球消失。问你戳破所有气球,最多能得到多少个硬币。此题暴力的想法就是去枚举所有戳破的策略,但是,戳破n个气球的全排列有n!种方案,解空间实在太大。想不出好的解法以下思路完全参考此博文定义dp...原创 2020-05-06 21:12:07 · 211 阅读 · 0 评论 -
背包问题求方案数
Problem题目链接Solution此题在01背包的基础上,需要你求出最优选法的方案数需要另开一个数组来记录方案数。此处需要注意,虽然是01背包的另一种问法,但此题需要把dp[1…m]初始化为负无穷。这样做的原因是,如果dp数组全部初始化为0,那么dp[k]的含义为容量为k时背包装的最大价值(注意此处不一定被装满了),那么这样就会造成重复计数的问题。若把dp[1…m]初始化为负无穷,那...原创 2020-05-05 14:59:08 · 440 阅读 · 0 评论 -
LeetCode 416. Partition Equal Subset Sum C++
Problem题目链接Solution题意为给你一个只包含正整数的非空数组,让你判断是否能把这个数组分成两部分,使得两部分的数字之和相等。若原数组所有数字之和是奇数,那么我们肯定不能分成两个和相等的子数组。若原数组所有数字之和是偶数,总和为sum,则可以把原题转化成背包问题:给你n个物品,n个物品分别有他们的质量,问你是否能从n件物品中选出若干件,这若干件的质量正好能装满容量为sum/2...原创 2020-04-29 09:43:34 · 153 阅读 · 0 评论 -
LeetCode 139. Word Break C++
Problem题目链接Solution题意为:给你一个非空字符串s,一个单词列表,让你判断是否能把s分割成若干单词(单词必须在所给列表里出现过)dp[i]表示s[0,i]是否能正确分割。那dp[i]怎么算呢?我们只需要遍历j属于[0,i],用j把[0,i]的字符串分割成两部分,[0,j]和[j+1,i],[0,j]区间是否能正确分割直接用dp[j]就可以知道,然后再去查找[j+1,i]子...原创 2020-04-28 11:16:10 · 193 阅读 · 0 评论 -
LeetCode 279. Perfect Squares C++
Problem题目链接Solution题意为:给定一个整数n,问n最少能由多少个完全平方数(1、4、9…)相加得到。我的思路:1、若n就是完全平方数,那么结果就是12、若n不是完全平方数,那么dp[n]=dp[n-t]+dp[t],其中t是小于n的完全平方数。那么就需要去遍历所有小于n的完全平方数。我自己的做法是用一个数组去存下目前所有的完全平方数(对应下面代码里的A)。在网上看到别...原创 2020-04-27 11:12:29 · 162 阅读 · 0 评论 -
LeetCode 63. Unique Paths II C++
Problem题目链接Solution此题为LeetCode62的后续,在62题的基础上,增加了障碍限制(若格子上有障碍,则无法通过这个格子)有了62题的基础,我们可以直接写一维dp因为只能向下或向右走,若地图中某个格子有障碍,那么该格子方案数都需要置0。此处有个特别注意的地方,若第一行中有障碍,那么不光该格子需要置0,且第一行中这个位置后所有格子都需要置0。若某格子没有障碍,那么dp...原创 2020-04-26 08:58:40 · 90 阅读 · 0 评论 -
LeetCode 62. Unique Paths C++
Problem题目链接Solution题意为给你一个n行m列的棋盘,左上角的格子里有一个机器人,机器人每次只能向右或者向下走一步,问走到右下角的格子上有几种走法。很明显是动态规划的题,设dp[i][j]是走到(i,j)这个格子的走法总数,那么其值就为dp(i-1,j)dp(i,j-1)两数之和(此处i-1、j-1需合法)考虑边界情况,即i1或j1时,因为只能向下或向右走,所以这些格子都是...原创 2020-04-25 12:56:34 · 148 阅读 · 0 评论 -
LeetCode 70. Climbing Stairs C++
Problem题目链接Solution题意为:每次爬楼梯,只能走1个台阶或2个台阶,问你走到第n阶有多少种走法。思路:设想现在已经走到了第n阶,那么想一想前面一步是怎么移动的?我们只能从第n-1阶走1步,或者从第n-2阶走2步,这样就能到达第n阶。重复这种做法,就能到达递归基的情况。上面是递归(自顶向下)的解法,同样,我们也可以用dp解法(自底向上)n=0,n=1时都只有一种走法,这就...原创 2020-04-24 09:46:00 · 192 阅读 · 0 评论 -
LeetCode 300. Longest Increasing Subsequence C++
Problem题目链接Solution题意为给定一个数组,要你求最长递增子序列(PS子序列是可以不连续的,子串则必须连续)动态规划解法,dp[i]为以i为结尾的最长递增子序列长度,那么对于0<=j<i,若nums[i]>nums[j],则i位置可以接在j位置后组成递增子序列,状态转移方程为dp[i]=max(dp[i],dp[j]+1)最后再遍历整个dp数组,找出最长递...原创 2020-04-23 15:18:18 · 138 阅读 · 0 评论 -
LeetCode 123. Best Time to Buy and Sell Stock III
Problem题目链接NotesBest Time to Buy and Sell Stock系列第一题要求的最多一次交易的最大收益,Best Time to Buy and Sell Stock系列第二题要求的无限次交易的最大收益。此题为该系列第三题,要求了交易次数为两次。其实,要求为一次、无限次下,求解很简单。但交易次数为k次(k为>1常数),那么事情就变得困难起来,因为有了次数限...原创 2020-03-26 16:00:53 · 79 阅读 · 0 评论