![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 61
颜值博主
这个作者很懒,什么都没留下…
展开
-
阿里3.22笔试
第一题:简单的0/1背包问题给定N个体积,及容量M,问是否能存在一个选择够成功填满背包。int main(){ int N, M; while (cin >> N >> M) { int dp[10001]; int weight[1001] = { 0 }; for (int i = 0; i < N; ++i) { cin >> weight[i]; } fill(dp, dp + 10001, 6001); dp[原创 2021-03-22 20:45:52 · 245 阅读 · 0 评论 -
11. 背包问题求方案数
有N件物品和一个容量是V的背包。每件物品只能使用一次。第ii件物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最优选法的方案数。注意答案可能很大,请输出答案模 109+7的结果。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有N行,每行两个整数vi,wi用空格隔开,分别表示第i件物品的体积和价值。输出格式输出一个整数,表示方案数模109+7的结果。...原创 2021-03-22 17:31:16 · 154 阅读 · 0 评论 -
2021.3.21腾讯笔试
第一题:链表遍历+链表复制题解:由于查询是随机的,跟遍历顺序无关,因此通过哈希记录所有需要查询的节点值。通过前序遍历树并更新路径,在遍历树的过程中判断,哈希表中存在的值就将当前路径链表复制,并将头指针存储在对应节点的map中,最后根据查询顺序输出。class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 你需要返回m个指针,第i个指针指向一条链,表示第i个问题的答案 * @param root Tr..原创 2021-03-22 09:59:35 · 287 阅读 · 0 评论 -
面试题 17.24. 最大子矩阵(二维前缀和)
难度困难61收藏分享切换为英文接收动态反馈给定一个正整数、负整数和 0 组成的 N × M矩阵,编写代码找出元素总和最大的子矩阵。返回一个数组[r1, c1, r2, c2],其中r1,c1分别代表子矩阵左上角的行号和列号,r2,c2分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。注意:本题相对书上原题稍作改动示例:输入:[ [-1,0], [0,-1]]输出:[0,1,0,1]解释:输入中标粗的元素即为输出所表示的矩阵说...原创 2021-03-11 15:00:56 · 212 阅读 · 0 评论 -
300. 最长递增子序列(Longes Increasing Subsequence, LIS)
难度中等1382给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:...原创 2021-03-04 16:03:54 · 294 阅读 · 1 评论 -
字典树使用
面试题 17.13. 恢复空格难度中等169哦,不!你不小心把一个长篇文章中的空格、标点都删掉了,并且大写也弄成了小写。像句子"I reset the computer. It still didn’t boot!"已经变成了"iresetthecomputeritstilldidntboot"。在处理标点符号和大小写之前,你得先把它断成词语。当然了,你有一本厚厚的词典dictionary,不过,有些词没在词典里。假设文章用sentence表示,设计一个算法,把文章断开,要求未识别的字符最少,返回未原创 2021-03-01 15:11:08 · 128 阅读 · 0 评论 -
5687. 执行乘法运算的最大分数
难度中等给你两个长度分别n和m的整数数组nums和multipliers,其中n >= m,数组下标从 1 开始计数。初始时,你的分数为0。你需要执行恰好m步操作。在第i步操作(从 1 开始计数)中,需要:选择数组nums开头处或者末尾处的整数x。 你获得multipliers[i] * x分,并累加到你的分数中。 将x从数组nums中移除。在执行m步操作后,返回最大分数。示例 1:输入:nums = [1...原创 2021-02-21 14:09:30 · 211 阅读 · 0 评论 -
LCP 20. 快速公交
难度困难小扣打算去秋日市集,由于游客较多,小扣的移动速度受到了人流影响:小扣从x号站点移动至x + 1号站点需要花费的时间为inc; 小扣从x号站点移动至x - 1号站点需要花费的时间为dec。现有m辆公交车,编号为0到m-1。小扣也可以通过搭乘编号为i的公交车,从x号站点移动至jump[i]*x号站点,耗时仅为cost[i]。小扣可以搭乘任意编号的公交车且搭乘公交次数不限。假定小扣起始站点记作0,秋日市集站点记作target,请返回小扣抵达秋日...原创 2020-09-17 20:42:26 · 211 阅读 · 0 评论 -
5666. 回文串分割 IV(最长回文子串、回文子序列)
题目难度Hard给你一个字符串s,如果可以将它分割成三个非空回文子字符串,那么返回true,否则返回false。当一个字符串正着读和反着读是一模一样的,就称其为回文字符串。示例 1:输入:s = "abcbdd"输出:true解释:"abcbdd" = "a" + "bcb" + "dd",三个子字符串都是回文的。示例 2:输入:s = "bcbddxy"输出:false解释:s 没办法被分割成 3 个回文子字符串。提示:3 <= s...原创 2021-01-31 14:22:48 · 383 阅读 · 0 评论 -
1631. 最小体力消耗路径(BFS+动态规划)
1631. 最小体力消耗路径难度中等127你准备参加一场远足活动。给你一个二维rows x columns的地图heights,其中heights[row][col]表示格子(row, col)的高度。一开始你在最左上角的格子(0, 0),且你希望去最右下角的格子(rows-1, columns-1)(注意下标从0开始编号)。你每次可以往上,下,左,右四个方向之一移动,你想要找到耗费体力最小的一条路径。一条路径耗费的体力值是路径上相邻格子之间高度差绝对值...原创 2021-01-29 16:24:17 · 333 阅读 · 0 评论 -
5243. 同积元组
难度中等1给你一个由不同正整数组成的数组nums,请你返回满足a * b = c * d的元组(a, b, c, d)的数量。其中a、b、c和d都是nums中的元素,且a != b != c != d。示例 1:输入:nums = [2,3,4,6]输出:8解释:存在 8 个满足题意的元组:(2,6,3,4) , (2,6,4,3) , (6,2,3,4) , (6,2,4,3)(3,4,2,6) , (3,4,2,6) , (3,4,6,2) ,...原创 2021-01-17 16:08:51 · 170 阅读 · 1 评论 -
面试题 17.23. 最大黑方阵(Leet code)
难度中等12给定一个方阵,其中每个单元(像素)非黑即白。设计一个算法,找出 4 条边皆为黑色像素的最大子方阵。返回一个数组[r, c, size],其中r,c分别代表子方阵左上角的行号和列号,size是子方阵的边长。若有多个满足条件的子方阵,返回r最小的,若r相同,返回c最小的子方阵。若无满足条件的子方阵,返回空数组。示例 1:输入:[ [1,0,1], [0,0,1], [0,0,1]]输出: [1,0,2]解释: 输入中 0 代表黑色,...原创 2020-09-15 20:22:58 · 282 阅读 · 0 评论 -
5454. 统计全 1 子矩形(Leetcode 196周赛)
5454.统计全 1 子矩形给你一个只包含 0 和 1 的rows * columns矩阵mat,请你返回有多少个子矩形的元素全部都是 1 。示例 1:输入:mat = [[1,0,1], [1,1,0], [1,1,0]]输出:13解释:有 6个 1x1 的矩形。有 2 个 1x2 的矩形。有 3 个 2x1 的矩形。有 1 个 2x2 的矩形。有 1 个 3x1 的矩形。矩形数目总共 = 6 + 2 + 3 +...原创 2020-07-05 12:09:49 · 416 阅读 · 0 评论 -
322. 零钱兑换(Leetcode--完全背包)
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。示例1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1来源:力扣...原创 2020-03-08 10:21:57 · 178 阅读 · 2 评论 -
LeetCode——解数独
Note:给定的数独序列只包含数字1-9和字符'.'。 你可以假设给定的数独只有唯一解。 给定数独永远是9x9形式的。在看到题目的第一个思路是通过深度优先搜索+优先队列+动态规划的方法解决 根据三条规则找出每个空位可能的取值数量,通过优先队列选出可能数量最少的一个点进行填充,紧接着对优先队列进行更新,重新判断改变加入点后每个点不同的取值可能,接着按照D...原创 2019-07-30 16:55:30 · 710 阅读 · 0 评论 -
LeetCode——63.不同路径Ⅱ
看到这个题目的时候想到的是通过深度优先搜索算法进行求解,找到每一条能够到达Finish的路径,并计数+1,最后得出的计数值即为解。 程序设计后提交对于部分测试用例超时,程序如下:class Solution {public: int count = 0; bool Flag[101][101]; void DFS(int N, int M, i...原创 2019-07-31 10:25:27 · 145 阅读 · 0 评论 -
大疆创新 2020校招 软件类岗位A卷 应该吃哪个呢(多重有限背包问题)
这道题是一个多重背包问题,将其转化为01背包后既可以解出。#include <iostream>#include<iomanip>#define INF (0x3f3f3f3f)using namespace std;int Price[2001], Manyi[2001]; //100*20int Data[2001][1000...原创 2019-08-05 11:25:40 · 946 阅读 · 0 评论 -
Leetcode 1155. 掷骰子的N种方法(149周赛)
这里有d个一样的骰子,每个骰子上都有f个面,分别标号为1, 2, ..., f。我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和。如果需要掷出的总点数为target,请你计算出有多少种不同的组合情况(所有的组合情况总共有 f^d 种),模10^9 + 7后返回。示例 1:输入:d = 1, f = 6, target = 3输出:1示例 2:输入...原创 2019-08-11 15:41:02 · 874 阅读 · 0 评论 -
小Q学习状态
题目要求找到数组中某一段最小值与该段所有值和的乘积的最大值。利用动态规划,将问题分解为将数组截取三段,取其最大值,分别为全部值、去掉数组最小值后左半部分、去掉数组最小值右左半部分。AC80,超时#include <map> #include <cmath> #include <queue> #include <cstd...原创 2019-12-13 10:01:54 · 120 阅读 · 0 评论 -
201803-4 棋局评估(动态规划+优先队列)
试题编号: 201803-4 试题名称: 棋局评估 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 Alice和Bob正在玩井字棋游戏。 井字棋游戏的规则很简单:两人轮流往3*3的棋盘中放棋子,Alice放的是“X”,Bob放的是“O”,Alice执先。当同一种棋子占据一行、一列或一条对角线的三个格...原创 2018-07-28 20:42:16 · 1677 阅读 · 1 评论