动态规划
动态规划
Khalil三省
coding
展开
-
【leetcode】63. 不同路径 II。 「动态规划」
很显然,这道题可以使用**动态规划**来做.我们先确认动态规划的状态转移方程,因为每次只能往右边或者下面移动,所以每次都有**两种移动的方案**,而这样就可以得出每一个位置处的前一步必定为上方或者左方,也就可以得出路线数为上方位置的路线数加上左方的路线数.这样也就列出了**状态转移方程**了,即**res[i][j]=res[i -1][j] + res[i][j - 1]**,当此处没有障碍物时.有障碍物就res等于0;然后我们再分析一下**初始条件**,动动脑子可得,第一行和第一列上的不管哪个位置都原创 2022-03-15 17:22:41 · 930 阅读 · 0 评论 -
【leetcode】55. 跳跃游戏。「贪心」「动态规划」
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。原创 2021-09-24 15:06:01 · 123 阅读 · 0 评论 -
ZJNU1172 数塔问题【基础算法・动态规划】——初级
Description设有一个三角形的数塔,顶点结点为根结点,每个结点有一个整数数值。从顶点出发,在每一个结点可以选择向左下走或者向右下走,一直走到底层,要求找出一条路径,使得路径上的和最大。Input输入数塔层数n输入n层数塔Output输出最大和Sample Input5 13 11 8 12 7 26 6 14 15 8 12 7 13 24 11Sample Outputmax=86代码区:#include <iostream>#incl原创 2021-05-21 15:38:44 · 221 阅读 · 0 评论 -
ZJNU1181 石子合并【基础算法・动态规划】——高级 NOI1995 区间动态规划
Description在操场上沿一直线排列着 n堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的两堆石子合并成新的一堆, 并将新的一堆石子数记为该次合并的得分。允许在第一次合并前对调一次相邻两堆石子的次序。计算在上述条件下将n堆石子合并成一堆的最小得分。Input输入数据共有二行,其中,第1行是石子堆数n≤100;第2行是顺序排列的各堆石子数(≤20),每两个数之间用空格分隔。Output输出合并的最小得分。Sample Input32 5 1Sample原创 2021-05-22 08:38:02 · 196 阅读 · 0 评论 -
ZJNU1177 0/1背包【基础算法・动态规划】——中高级
Description一个旅行者有一个最多能装m公斤的背包,现有n件物品,它们的重量分别是w1,w2,w3,...,wn,它们的价值分别为c1,c2,c3,...,cn。若每种物品只有一件,求旅行者能获得的最大总价值。Inputm,和n(m<=200, n<=30)接下来共n行每行两个整数wi,ciOutput最大总价值Sample Input10 42 13 34 57 9Sample Output12代码区:#include &原创 2021-05-21 14:55:16 · 154 阅读 · 0 评论 -
ZJNU1179 装箱问题 动态规划 01背包 NOIP2001普及
Description有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。Input两个整数m为箱子容量 n个物品接下来n行,分别表示这n个物品的各自体积。Output一个整数,表示箱子剩余空间。Sample Input2468312797Sample Output0代码区:#include <cst原创 2021-05-21 13:24:17 · 186 阅读 · 0 评论 -
ZJNU1306 最长下降序列——中高级 动态规划 dp
Description给你一串整数,从左到右按顺序挑出一些数字,构成严格下降序列,问最长能构成多长如6个数4 5 2 4 2 2, 那么最长可以挑出5 4 2,长度为3。Input首先输出T(T<=50),表示有T组数据。每组数据:首先输入n表示有几个数(1<n<10000)。后面一行跟着n个整数Output对于每个样例输出一个数字,表示最长的长度Sample Input164 5 2 4 2 2Sample Output3代码区:原创 2021-05-23 19:22:16 · 123 阅读 · 0 评论 -
洛谷P1002 过河卒 [NOIP2002 普及组] 「动态规划」
题目描述棋盘上AA点有一个过河卒,需要走到目标BB点。卒行走的规则:可以向下、或者向右。同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,AA点(0, 0)(0,0)、BB点(n, m)(n,m),同样马的位置坐标是需要给出的。现在要求你计算出卒从AA点能够到达BB点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。输入格式一行四个正整数,分别表示BB点坐标和...原创 2021-05-28 11:45:27 · 178 阅读 · 0 评论 -
ZJNU1068 洛谷1044 栈——中级 NOIP 2003 普及组 「动态规划」
Description栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈)。 栈的重要性不言自明,任何一门数据结构的课程都会介绍栈。宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,而他自己无法给出答案,所以需要你的帮忙。宁宁考虑的是这样一个问题:一个操作数序列,从1,2,一直到n(图示为1到3的情况),栈A的深度大于n。 现在可以进行两种操作, 1.将一个数,从操作数序列的头原创 2021-05-28 10:25:25 · 212 阅读 · 0 评论 -
ZJNU1178 完全背包【基础算法・动态规划】——中高级
Description设有n种物品,每种物品有一个重量以及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为m,现在从n种物品中选取若干件(同一种物品可以多次选择),使其重量的和小于等于m,而价值的和为最大。Input两个整数m,n(背包容量m<=200, 物品数量n<=30);每行2个整数分别表示每个物品的重量和价值。Output最大总价值Sample Input12 42 13 34 57 9Sample Outputmax原创 2021-05-28 08:53:15 · 160 阅读 · 0 评论 -
洛谷P1048 采药 [NOIP2005 普及组] 「动态规划」「背包问题」
题目描述辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”如果你是辰辰,你能完成这个任务吗?输入格式第一行有22个整数TT(1 \le T \le 10001≤T≤...原创 2021-05-28 13:07:25 · 278 阅读 · 0 评论 -
【leetcode】 121. 买卖股票的最佳时机 剑指Offer 63 股票的最大利润。 「动态规划」
给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 ...原创 2021-06-03 21:17:02 · 124 阅读 · 0 评论 -
【leetcode】 123. 买卖股票的最佳时机 III。 「动态规划」
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入:prices = [3,3,5,0,0,3,1,4]输出:6解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。 随后,在第 7 天(股票价格 = 1)的时候买入,在第 ...原创 2021-06-03 21:20:45 · 129 阅读 · 0 评论 -
【leetcode】122. 买卖股票的最佳时机 II 「动态规划」
给定一个数组 prices ,其中prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4...原创 2021-06-03 21:25:08 · 81 阅读 · 0 评论 -
【leetcode】 5. 最长回文子串 「中心拓展法」「动态规划」
给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"示例 3:输入:s = "a"输出:"a"示例 4:输入:s = "ac"输出:"a"提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成来源:力扣(LeetCode)链接:https://leetcode..原创 2021-06-03 21:04:08 · 148 阅读 · 0 评论 -
ZJNU 1175 合唱队形【基础算法・动态规划】——中高级 NOIP2004提高
DescriptionN位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<...Ti>…>TK(1<=i<=K)。你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。Input输入文件的第一行是一个整数N(2<=N<=100),表示同学的总数原创 2021-05-21 08:52:07 · 177 阅读 · 0 评论