DP(动态规划)
文章平均质量分 79
唐家·威少
中二病晚期
展开
-
洛谷-【动态规划】-P2196 挖地雷
题目背景NOIp1996提高组第三题题目描述在一个地图上有NN个地窖(N \le 20)(N≤20),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径。当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然后可以沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使某人能挖到最多的地雷。输入输出格式输入格式:有若干行。...原创 2018-10-08 21:27:29 · 606 阅读 · 0 评论 -
洛谷-【动态规划】- 货币系统 Money Systems
题目描述母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统。由于它们特殊的思考方式,它们对货币的数值感到好奇。传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单位面值组成的。母牛想知道有多少种不同的方法来用货币系统中的货币来构造一个确定的数值。举例来说, 使用一个货币系统 {1,2,5,10,...}产生 18单位面值的一些可能的方法是:18x1...原创 2018-10-01 20:36:33 · 1379 阅读 · 1 评论 -
洛谷-【动态规划】- 球迷购票问题
题目背景盛况空前的足球赛即将举行。球赛门票售票处排起了球迷购票长龙。按售票处规定,每位购票者限购一张门票,且每张票售价为50元。在排成长龙的球迷中有N个人手持面值50元的钱币,另有N个人手持面值100元的钱币。假设售票处在开始售票时没有零钱。试问这2N个球迷有多少种排队方式可使售票处不致出现找不出钱的尴尬局面。题目描述例如当n=2是,用A表示手持50元面值的球迷,用B表示手持100...原创 2018-10-01 20:31:55 · 847 阅读 · 0 评论 -
LeetCode-【动态规划】-最长的斐波那契子序列
如果序列 X_1, X_2, ..., X_n 满足下列条件,就说它是 斐波那契式 的:n >= 3 对于所有 i + 2 <= n,都有 X_i + X_{i+1} = X_{i+2}给定一个严格递增的正整数数组形成序列,找到 A 中最长的斐波那契式的子序列的长度。如果一个不存在,返回 0 。(回想一下,子序列是从原序列 A 中派生出来的,它从 A 中删掉任意数量的元素...原创 2018-09-25 21:22:37 · 701 阅读 · 0 评论 -
LeetCode-【动态规划】-单词划分
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以...原创 2018-09-19 22:28:07 · 1114 阅读 · 0 评论 -
LeetCode-【动态规划】-出界的路径数
给定一个 m × n 的网格和一个球。球的起始坐标为 (i,j) ,你可以将球移到相邻的单元格内,或者往上、下、左、右四个方向上移动使球穿过网格边界。但是,你最多可以移动 N 次。找出可以将球移出边界的路径数量。答案可能非常大,返回 结果 mod 109 + 7 的值。示例 1:输入: m = 2, n = 2, N = 2, i = 0, j = 0输出: 6解释:示例 2:...原创 2018-09-23 18:52:20 · 443 阅读 · 0 评论 -
LeetCode-【动态规划】-“马”在棋盘上的概率
已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从0开始。即最左上角的格子记为 (0, 0), 最右下角的记为 (N-1, N-1)。 现有一个“马”(也译作“骑士”)位于 (r, c) ,并打算进行 K 次移动。 如下图所示,国际象棋的“马”每一步先沿水平或垂直方向移动2个格子,然后向与之相垂直的方向再移动1个格子,共有8个可选的位置。现在“马”每一步都从可选的位置(包括棋...原创 2018-09-23 18:46:37 · 1786 阅读 · 1 评论 -
LeetCode-【动态规划】-只有两个键的键盘
最初在一个记事本上只有一个字符 'A'。你每次可以对这个记事本进行两种操作:Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的)。 Paste (粘贴) : 你可以粘贴你上一次复制的字符。给定一个数字 n 。你需要使用最少的操作次数,在记事本中打印出恰好 n 个 'A'。输出能够打印出 n 个 'A' 的最少操作次数。示例 1:输入: 3...原创 2018-09-23 18:37:36 · 897 阅读 · 0 评论 -
LeetCode-【动态规划】-最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?题解:...原创 2018-09-18 22:10:23 · 199 阅读 · 0 评论 -
LeetCode-【动态规划】- 最大加号标志
在一个大小在 (0, 0) 到 (N-1, N-1) 的2D网格 grid 中,除了在 mines 中给出的单元为 0,其他每个单元都是 1。网格中包含 1 的最大的轴对齐加号标志是多少阶?返回加号标志的阶数。如果未找到加号标志,则返回 0。一个 k" 阶由 1 组成的“轴对称”加号标志具有中心网格 grid[x][y] = 1 ,以及4个从中心向上、向下、向左、向右延伸,长度为 k-1,由...原创 2018-09-10 22:01:05 · 880 阅读 · 0 评论 -
LeetCode-【动态规划】-完全平方数
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.题解:最基本的思路,先列举一定数量的数据,看看是否能够找到规律,呵呵,恰巧本...原创 2018-09-10 20:42:35 · 4433 阅读 · 1 评论 -
LeetCode-【动态规划】-最佳买卖股票时机含冷冻期
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3 解释: 对应的交易状态为: [买入, ...原创 2018-09-10 19:39:11 · 604 阅读 · 0 评论 -
洛谷-【动态规划】- P1508 Likecloud-吃、吃、吃
题目背景问世间,青春期为何物?答曰:“甲亢,甲亢,再甲亢;挨饿,挨饿,再挨饿!”题目描述正处在某一特定时期之中的李大水牛由于消化系统比较发达,最近一直处在饥饿的状态中。某日上课,正当他饿得头昏眼花之时,眼前突然闪现出了一个n*m(n and m<=200)的矩型的巨型大餐桌,而自己正处在这个大餐桌的一侧的中点下边。餐桌被划分为了n*m个小方格,每一个方格中都有一个圆形的巨型大...原创 2018-10-02 21:24:19 · 236 阅读 · 0 评论 -
洛谷-【动态规划】- P2858 [USACO06FEB]奶牛零食Treats for the Cows
题目描述FJ has purchased N (1 <= N <= 2000) yummy treats for the cows who get money for giving vast amounts of milk. FJ sells one treat per day and wants to maximize the money he receives over a g...原创 2018-10-02 21:37:06 · 555 阅读 · 0 评论 -
洛谷-【动态规划】- 递增
题目描述现有数列A_1,A_2,\cdots,A_NA1,A2,⋯,AN,修改最少的数字,使得数列严格单调递增。输入输出格式输入格式: 第1 行,1 个整数N第2 行,N 个整数A_1,A_2,\cdots,A_NA1,A2,⋯,AN 输出格式:1 个整数,表示最少修改的数字输入输出样例输入样例#1: 复制31 3 2输出样例#1...原创 2018-09-29 21:54:30 · 814 阅读 · 0 评论 -
洛谷-【动态规划】-P2925 [USACO08DEC]干草出售Hay For Sale
题意翻译题目描述农民john面临一个很可怕的事实,因为防范失措他存储的所有稻草给澳大利亚蟑螂吃光了,他将面临没有稻草喂养奶牛的局面。在奶牛断粮之前,john拉着他的马车到农民Don的农场中买一些稻草给奶牛过冬。已知john的马车可以装的下C(1 <= C <=50,000)立方的稻草。农民Don有H(1 <= H <= 5,000)捆体积不同的稻草可供购买,每一捆...原创 2018-10-14 17:42:55 · 794 阅读 · 0 评论 -
洛谷-【动态规划】-P2722 总分 Score Inflation
题目背景学生在我们USACO的竞赛中的得分越多我们越高兴。我们试着设计我们的竞赛以便人们能尽可能的多得分,这需要你的帮助题目描述我们可以从几个种类中选取竞赛的题目,这里的一个"种类"是指一个竞赛题目的集合,解决集合中的题目需要相同多的时间并且能得到相同的分数。你的任务是写一个程序来告诉USACO的职员,应该从每一个种类中选取多少题目,使得解决题目的总耗时在竞赛规定的时间里并且总分最...原创 2018-10-14 17:39:49 · 366 阅读 · 0 评论 -
洛谷-【动态规划】-P2896 [USACO08FEB]一起吃饭Eating Together
题目描述The cows are so very silly about their dinner partners. They have organized themselves into three groups (conveniently numbered 1, 2, and 3) that insist upon dining together. The trouble starts ...原创 2018-10-14 11:47:47 · 439 阅读 · 0 评论 -
动态规划-背包九讲
背包九讲 目录 第一讲 01背包问题 第二讲 完全背包问题 第三讲 多重背包问题 第四讲 混合三种背包问题 第五讲 二维费用的背包问题 第六讲 分组的背包问题 第七讲 有依赖的背包问题 第八讲 泛化物品 第九讲 背包问题问法的变化 附:USACO中的背包问题 前言本篇文章是我(dd_engi)正在进行中的一个雄心勃勃的写作计划的一部分,这个计划的内容是写作...转载 2018-09-28 09:41:44 · 759 阅读 · 0 评论 -
洛谷-【动态规划】- 大朋友的数字
在NOIP2013的赛场上,常神牛华丽丽的手残了,小朋友的数字一题只得了10分。于是,他要恶搞一下这道题。题目描述有一批大朋友(年龄15岁以上),他们每人手上拿着一个数字,当然这个数字只有1位,也就是0到9之间。每个大朋友的分数为在他之前的最长不下降子序列中所有数之和。(这个序列必须以它作为结尾!)如有多个最长不下降子序列,那么取编号字典序最小的。现在告诉你有n个大朋友,以及他们各自的数字...原创 2018-09-27 21:52:27 · 492 阅读 · 0 评论 -
洛谷-【动态规划】- P1566 加等式
题目描述对于一个整数集合,我们定义“加等式”如下:集合中的某一个元素可以表示成集合内其他元素之和。如集合{1,2,3}中就有一个加等式:3=1+2,而且3=1+2 和3=2+1是相同的加等式,也是这个集合唯一的加等式。给定一个整数集合,编程找出其所有的加等式的个数输入输出格式输入格式:第一行为t,表示测试数据组数。(1≤t≤10);接下来t 行,每行表示一组测试数据。其中第一个...原创 2018-10-04 21:08:15 · 412 阅读 · 0 评论 -
LeetCode-【动态规划】-目标和
给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 1:输入: nums: [1, 1, 1, 1, 1], S: 3输出: 5解释: -1+1+1+1+1 = 3+1-1+1+1+1 ...原创 2018-09-21 21:28:19 · 1211 阅读 · 0 评论 -
LeetCode-【动态规划】- 一和零
在计算机界中,我们总是追求用有限的资源获取最大的收益。现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次。注意:给定 0 和 1 的数量都不会超过 100。 给定字符串数组的长度不会超过 600。示例 1...原创 2018-09-21 20:45:56 · 919 阅读 · 0 评论 -
LeetCode-【动态规划】-分割等和子集&划分为k个相等的子集
1.分割等和子集给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100 数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false...原创 2018-09-21 18:10:37 · 7668 阅读 · 1 评论 -
洛谷-【动态规划】- P1091 合唱队形
题目描述NN位同学站成一排,音乐老师要请其中的(N-KN−K)位同学出列,使得剩下的KK位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2,…,K,他们的身高分别为T_1,T_2,…,T_KT1,T2,…,TK, 则他们的身高满足T_1<...<T_i>T_{i+1}>…>T_K(1 \le i \le K)...原创 2018-10-03 21:40:17 · 386 阅读 · 0 评论 -
LeetCode-【动态规划】-删除与获得点数
给定一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除每个等于 nums[i] - 1 或 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入: nums = [3, 4, 2]输出: 6解释: 删除 4 来获得 4 个点...原创 2018-09-10 19:20:06 · 768 阅读 · 0 评论 -
LeetCode-【动态规划】-零钱兑换
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1...原创 2018-09-12 17:31:42 · 4239 阅读 · 0 评论 -
LeetCode-【动态规划】-组合总和 Ⅳ
给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。示例:nums = [1, 2, 3]target = 4所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。因此输出为 7。进阶:如果给定的数组中含有负...原创 2018-09-12 16:40:00 · 814 阅读 · 4 评论 -
LeetCode-【数组】-使用最小花费爬楼梯
数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例 1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从c...原创 2018-08-21 15:22:33 · 492 阅读 · 0 评论 -
LeetCode-【数组】-不同路径&不同路径||
1.不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m 和 n 的值均不超过 100。示例 1:输入: m = 3, n = 2输出...原创 2018-07-25 19:47:29 · 2007 阅读 · 0 评论 -
DP-从基础题理解动态规划问题(4)(编辑距离)
编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 下图为计算字符“beauty”与“batyu”编辑距离的二维图解: 步骤详解:1)先建立一张二维表(矩阵),如上图所示。矩阵中(0,0)位置不对应字母。 2)计算矩阵(1...原创 2018-03-21 21:15:32 · 507 阅读 · 0 评论 -
DP-从基础题理解动态规划问题(3)(最长的公共子串)
二维数组用来记录每一个分别以字符串1为匹配串或以字符串2为匹配串的公共字符长度,可得到如下的动态转移方程:import java.util.*;public class 最长公共子串 { public static void main(String[] args) { Scanner in=new Scanner(System.in); //输入两个字符串 String s1=in...原创 2018-03-21 20:31:22 · 293 阅读 · 0 评论 -
DP-从基础题理解动态规划问题(2)(最长的不重复子串的长度)
输入一个字符串,输出其中最长的不重复子串的长度输入asdfasd输出4import java.util.*;public class 求字符串的最长不重复子串的长度 { public static void main(String[] args) { Scanner in=new Scanner(System.in); String s=""; s=in.nextLine(); ...原创 2018-03-21 19:54:40 · 993 阅读 · 0 评论 -
DP-从基础题理解动态规划问题(1)(找零钱问题)
现存在一堆面值为 V1、V2、V3 … 个单位的硬币,问最少需要多少个硬币才能找出总值为 T 个单位的零钱?输入描述:首先输入整数T表示需要找零的面值然后输入整数n表示,可供选择的硬币的种数最后循环录入可供选择的硬币数组输出描述:输出为一行,如果可以找零,输出所需的最小硬币数,否则输出-1输入例子:6351 2 5 21 25输出例子:3题解: 显然需要找零的面值越大,那么求解的难度就相应加大,...原创 2018-03-21 19:41:46 · 1578 阅读 · 0 评论 -
DP-FatMouse and Cheese(HDU 记忆化搜索)
FatMouse and CheeseTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12342 Accepted Submission(s): 5224Problem DescriptionFatMouse has stored s...原创 2018-03-23 15:54:21 · 203 阅读 · 0 评论 -
DP-选课(树形DP)
Description 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习。现在有N门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程a是课程b的先修课即只有学完了课程a,才能学习课程b)。一个学生要从这些课程里选择M门课程学习,问他能获得的最大学分是多少? Input 第一行有两个整数N...原创 2018-03-22 17:01:36 · 1857 阅读 · 0 评论 -
DP-加分二叉树(区间动态规划)
P1040 加分二叉树 https://www.luogu.org/problemnew/show/1040题目描述设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下:su...原创 2018-03-22 14:36:00 · 659 阅读 · 0 评论 -
DP-01背包问题
1、动态规划(DP) 动态规划(Dynamic Programming,DP)与分治区别在于划分的子问题是有重叠的,解过程中对于重叠的部分只要求解一次,记录下结果,其他子问题直接使用即可,减少了重复计算过程。 另外,DP在求解一个问题最优解的时候,不是固定的计算合并某些子问题的解,而是根据各子问题的解的情况选择其中最优的。 动态规划求解具有以下的性质: 最优子结构性质、子问题...原创 2018-03-11 14:56:59 · 493 阅读 · 0 评论 -
Problem B: 动态规划基础题目之最长上升子序列
Problem B: 动态规划基础题目之最长上升子序列Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 98 Solved: 55[Submit][Status][Web Board]Description一个数的序列bi,当b1 b2 < ... <bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a原创 2017-05-13 09:50:54 · 519 阅读 · 0 评论 -
LeetCode-【数组】- 买卖股票的最佳时机含手续费
给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每次交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。示例 1:输入: prices = [1, 3, 2, 8, 4, 9], fee = 2输出: 8解释: 能够达...原创 2018-08-31 17:55:16 · 2298 阅读 · 0 评论