普通DP
文章平均质量分 56
Grit_ICPC
Dielts
展开
-
【leetCode-递归、DP】650. 只有两个键的键盘
最初在一个记事本上只有一个字符 'A'。你每次可以对这个记事本进行两种操作:Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的)。Paste (粘贴) : 你可以粘贴你上一次复制的字符。给定一个数字n。你需要使用最少的操作次数,在记事本中打印出恰好n个 'A'。输出能够打印出n个 'A' 的最少操作次数。来源:示例 1:输入: ...原创 2020-02-01 23:00:41 · 388 阅读 · 0 评论 -
【leetCode-DP】买卖股票的最佳时机(1-4)
参考:传送门定义通用状态dp[i][j][k] 数组,含义dp[第一天...第N天的股票价格 ][限制交易次数][ 0未持有股票;1持有股票 ]通用状态转移方程:dp[i][j][0] = Math.max(dp[i - 1][ j ][0], dp[i - 1][ j ][1] + prices[i] );dp[i][j][1] = Math.max(dp[i - 1][ j ]...原创 2020-02-01 20:32:35 · 436 阅读 · 0 评论 -
【leetCode-搜索、DP】139. 单词拆分
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以...原创 2020-01-29 12:29:34 · 330 阅读 · 0 评论 -
【leetCode-DP】300. 最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。 定义dp[i]为截止数组的第i个位置的最长上升序列,定义转移方程: for(int i = 0;i < len-1;i++) { for(...原创 2020-01-08 12:52:50 · 208 阅读 · 0 评论 -
【leetCode-DP】91. 解码方法
一条包含字母A-Z 的消息通过以下方式进行了编码:'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: "12"输出: 2解释:它可以解码为 "AB"(1 2)或者 "L"(12)。示例2:输入: "226"输出: 3解释:它可以解码为 "BZ" (2 26), ...原创 2020-01-03 21:19:51 · 218 阅读 · 0 评论 -
【leetCode-DP】343. 整数拆分
给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 ×3 ×4 = 36。说明: 你可以假设n不小于 2 且不大于 58。通过列举出一些数后可...原创 2019-12-26 21:31:40 · 251 阅读 · 1 评论 -
【leetCode-DP】413. 等差数列划分
如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,以下数列为等差数列:1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9以下数列不是等差数列。1, 1, 2, 5, 7数组 A 包含 N 个数,且索引从0开始。数组 A 的一个子数组划分为数组 (P, Q),P 与 Q 是整数且满足 0<=P<...原创 2019-12-25 11:12:49 · 280 阅读 · 0 评论 -
【牛客】发邮件
题目传送门:点我 NowCoder每天要给很多人发邮件。有一天他发现发错了邮件,把发给A的邮件发给了B,把发给B的邮件发给了A。于是他就思考,要给n个人发邮件,在每个人仅收到1封邮件的情况下,有多少种情况是所有人都收到了错误的邮件?即没有人收到属于自己的邮件。结合我们的做题步骤:1).定义一个能够清楚描述最优子问题的数组(明确数组描述的含义)。2).找出数组元素之...原创 2019-12-23 21:10:49 · 482 阅读 · 1 评论 -
【leetCode-DP】198. 打家劫舍
结合我们的做题步骤:1).定义一个能够清楚描述最优子问题的数组(明确数组描述的含义)。2).找出数组元素之间的关系式(状态转移方程)3).找出初始值code: public static int rob(int[] nums) { //1.dp[i] 截至到第i户抢的最多金额 //2.状态转移方程 dp[i] = max(dp[i...原创 2019-12-20 20:46:21 · 173 阅读 · 0 评论 -
【leetCode-DP】 72. 编辑距离
给定两个单词word1 和word2,计算出将word1转换成word2 所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例1:输入: word1 = "horse", word2 = "ros"输出: 3解释: horse -> rorse (将 'h' 替换为 'r')rorse -> rose ...原创 2019-12-20 20:44:29 · 212 阅读 · 0 评论 -
【leetCode-DP】64. 最小路径和
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。结合我们的做题步骤:1).定义一个能够清楚描述最优子问题的数组(明确数组描述的含义)。...原创 2019-12-17 10:15:03 · 212 阅读 · 0 评论 -
【leetCode-DP】62. 不同路径
题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?(从坐上角走到右下角)例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m 和 n 的值均不超过 100。示例 1:输入: m = ...原创 2019-12-16 13:27:15 · 181 阅读 · 0 评论 -
南京理工大学第八届程序设计大赛(校外镜像) sequence(dp+二分)
二分+dp求最长下降子序列#include<map>#include<queue>#include<cmath>#include<cstdio>#include<stack>#include<iostream>#include<cstring>#include<algorithm>#define LL int#define inf 0x3f3f3f3f#define eps 1e原创 2016-04-18 17:39:12 · 1009 阅读 · 0 评论 -
HDU 5256 序列变换 (LIS变形&&STL)
思路:有一点应该注意就是如果序列是2 3 3 3 4 最少修改的就是最后的3个数。我们可以先减去他的下标即得到的序列就是 2 2 1 0 0.(下标从0开始) 之后就是求出一个严格上升的序列,当不满足dp[cnt]#include<map>#include<queue>#include<cmath>#include<cstdio>#include<stack>#include<iostr原创 2016-03-28 20:43:13 · 390 阅读 · 0 评论 -
HDU 1069 (累积木)
大意:有n种积木,每种有无限多个,问面积大在下,小在上,最高能有多高。思路:给定无限种其实最多每种有三个积木可以用,然后进行面积的排序(面积或边长排序),进行DP(注意dp时条件为下边两边长一定大于上面两边长,一次不能按照面积排)。#include<map>#include<queue>#include<cmath>#include<iostream>#include<cstdio>#in原创 2016-02-25 09:22:47 · 943 阅读 · 0 评论 -
HDU 4001 To Miss Our Children Time(DP LIS)
题目大意:给定一些木块的长宽高及其编号, 1、如果编号为0,则应该满足当前木块长(&&宽)>=下边的木块长(宽) 2、如果编号为1,则应该满足当前木块长(&&宽)>=下边的木块长(宽)&&面积也比下边木块面积大 3、如果编号为0,则应该满足当前木块长(&&宽)>下边的木块长(宽)思路:类似于DP的LIS只不过求得是高度,输入数据后注意排序并且结构体的所有成员都要排序,注意在数据都不符合条件的时原创 2016-02-24 14:21:53 · 443 阅读 · 0 评论 -
POJ 3267 The Cow Lexicon(DP单词匹配)
题目大意:给定一个长序列长度m,接着n个单词,问最少能删除多少语句中的字符使得在n个单词中选若干个,可以使得凑出当前序列。思路:既然是在序列中,删除一部分多余的单词,使得凑成选出的某些单词。所以,1、可以用dp[i]表示在i~m中能够删除序列中的最小数目(初始化DP[m]=0,从后向前匹配)。2、状态转移方程分为两种情况:a.不能够匹配(这种情况就是最坏的删除所有的从i~m的单词dp[i]=dp[i原创 2016-02-21 16:22:04 · 413 阅读 · 0 评论 -
HDU 1494 跑跑卡丁车 (分段DP)
题目大意:注意题目的意思,当两个能量卡积满之后,两个能量卡是仍然存在的,只是当前不会产生新卡且当前的卡的能量清零。刚看到这题感觉挺棘手,分不同的段道,并且还会有能量的集聚。加上圈数。那么就可以用dp[i][j]表示第i个段道有能量j。以能量点或者段分析当前的状态转化,最后在换圈的时候进行将当前状态转换到下一状态就可以。#include#include#include#includ原创 2016-01-11 20:41:54 · 632 阅读 · 0 评论 -
HDU 2571 命运 (DP)
题目大意:从方格的最左上角开始走到方格的最右下角的过程中所能加得的最大和。思路:刚开始做的时候以找三者中最大的值为线索进行了暴搜,后来发现这么并不是最优的情况。 显然是DP啊,所以如果主要从其他的状态转化成当前的状态所以dp[i][j]=max(之前状态)。因为又有同列的最大值所以再找一次即可。#include #include#include#includeusing n原创 2016-01-11 09:11:34 · 467 阅读 · 0 评论 -
HDU 1160 FatMouse's Speed (LIS +路径标记)
思路:要求最长的序列肯定是LIS,并且路径也要标记下来。这里的路径标记和做AOE网络上标记路径类似都是通过在状态转化时,进行pre[i]=j;i的前边是j(下标)。然后通过一个循环将顺序转换过来,但是注意判断终止的条件,是i=pre[i],之后判断i是不是0。(同时这题的输入也很坑)。#include#include#include#include#include#inclu原创 2016-01-09 19:07:25 · 564 阅读 · 0 评论 -
HDU 1203 I NEED A OFFER! (01DP)
思路:这道题01是很明显的但是在初始化的时候,愣了,想和上一道DP题一样找到一个dp[]值来初始化为0,其余为inf但是,并找不到这么一个数。可以看出1-n最大的概率都为1,那么既然是求最小值,那么可以初始化为最大。现在有两种初始化方式:1.求最小直接初始化成最大2.求最小以某个dp[]值初始化为0(或据情况的最小值)其余初始化最大。#include#include#inclu原创 2016-01-07 21:54:12 · 360 阅读 · 0 评论 -
HDOJ 1028 Ignatius and the Princess III(DP)
Problem Description"Well, it seems the first problem is too easy. I will let you know how foolish you are later." feng5166 says."The second problem is, given an positive integer N, we define an原创 2015-08-26 11:25:48 · 920 阅读 · 0 评论 -
HDOJ 1284 钱币兑换问题(DP)
在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。 Input每行只有一个正整数N,N小于32768。 Output对应每个输入,输出兑换方法数。 Sample Input293412553 Sample Output71883113137761#incl原创 2015-08-26 11:17:47 · 484 阅读 · 0 评论 -
小明的骰子 SDUT
小明的骰子Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^题目描述众所周知,小明非常喜欢玩骰子。一天,小芳问小明一个问题。一次性抛n个骰子,一共能抛出几种结果?小明不想让小芳觉得自己回答不上来,所以小明来求助于你。你一定要帮帮小明。输入首先输入一个整数T,代表有T组数据。接下来的T行,每行原创 2015-07-29 10:59:30 · 585 阅读 · 0 评论 -
416B - Art Union (DP)
A well-known art union called "Kalevich is Alive!" manufactures objects d'art (pictures). The union consists ofn painters who decided to organize their work as follows.Each painter uses only the c原创 2015-08-25 14:59:59 · 445 阅读 · 0 评论 -
POJ 1080 Human Gene Functions(DP LCS)
DescriptionIt is well known that a human gene can be considered as a sequence, consisting of four nucleotides, which are simply denoted by four letters, A, C, G, and T. Biologists have been interest原创 2015-08-25 10:12:16 · 626 阅读 · 0 评论 -
POJ 1260 Pearls(DP)
DescriptionIn Pearlania everybody is fond of pearls. One company, called The Royal Pearl, produces a lot of jewelry with pearls in it. The Royal Pearl has its name because it delivers to the royal f原创 2015-08-24 21:30:24 · 620 阅读 · 0 评论 -
SDUTOJ 2080 最长公共子序列问题(LCS)
题目描述 给定两个序列X=输入输入数据有多组,每组有两行 ,每行为一个长度不超过500的字符串(输入全是大写英文字母(A,Z)),表示序列X和Y。输出每组输出一行,表示所求得的最长公共子序列的长度,若不存在公共子序列,则输出0。示例输入ABCBDABBDCABA示例输出4#include#include#includ原创 2015-08-24 20:04:31 · 550 阅读 · 0 评论 -
POJ 3176 Cow Bowling(DP 数字三角形)
The cows don't use actual bowling balls when they go bowling. They each take a number (in the range 0..99), though, and line up in a standard bowling-pin-like triangle like this: 7原创 2015-08-25 08:36:30 · 404 阅读 · 0 评论 -
整数因子分解问题 SDUT
整数因子分解问题Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^题目描述大于1 的正整数n可以分解为:n=x1*x2*…*xm。例如,当n=12 时,共有8 种不同的分解式:12=12;12=6*2;12=4*3;12=3*4;12=3*2*2;12=2*6;12=2*3*2;原创 2015-07-30 20:45:00 · 1243 阅读 · 0 评论 -
HDOJ 4502 吉哥系列故事——临时工计划(DP)
Problem Description 俗话说一分钱难倒英雄汉,高中几年下来,吉哥已经深深明白了这个道理,因此,新年开始存储一年的个人资金已经成了习惯,不过自从大学之后他不好意思再向大人要压岁钱了,只能把唯一的希望放到自己身上。可是由于时间段的特殊性和自己能力的因素,只能找到些零零碎碎的工作,吉哥想知道怎么安排自己的假期才能获得最多的工资。 已知吉哥一共有m天的假期,每天的编号从1到m原创 2015-08-27 19:41:19 · 889 阅读 · 0 评论 -
HDU 1024 Max Sum Plus Plus (若干子区间求解最大值)
思路:对于此类型的题目,可以从以下几个方面分析, 1.以当前的数为切入点,只有两种情况(1)当前的数单独的新放到一个区间.(2)将其放入和j-1同个区间。那么我们可以用dp[i][j]表示在前j个数划分了i个区间。固有状态转移方程:dp[i][j]=max(dp[i-1][j-1],dp[i][j-1])+a[j];由于m的范围没有给出所以不可开dp[m][n]的数组。那么就需要有优化的方原创 2016-01-06 22:09:33 · 395 阅读 · 0 评论 -
POJ 1159 Palindrome(DP LCS&滚动数组)
DescriptionA palindrome is a symmetrical string, that is, a string read identically from left to right as well as from right to left. You are to write a program which, given a string, determines the原创 2015-08-25 11:07:01 · 737 阅读 · 0 评论 -
HDU 1003 Max Sum (DP)
思路:此题在NYOJ做过一道类似的。当时那题不需要标记出左右的区间。抛开DP来讲,要找到最大和的sub序列应当是在加和到负数的时候就应当将和sum清零重新计算。DP的话只需要前缀和与a[i]自身比较就行。同时记录好前后位置。尤其在记录左端的位置,并不是有了a[i]>dp[i-1]+a[i]这个关系就要更新l的值。毕竟找到是max指,所以必须在更新max的时候将po赋值给l;#inc原创 2016-01-05 20:55:36 · 385 阅读 · 0 评论 -
HDU 2084 数塔(DP)
思路:根据题意可得要使每次疲劳最小必须是所选的两件物品差距不大,我们可以用dp[i][j]代表从i件物品中挑选出j双物品。那么易得dp[i][j]=min ( (a[i]-a[i-1]*(a[i]-a[i-1])+dp[i-2][j-1]),dp[i-1][j] ) ;其中a[i]是拍完序的。因为是挑选最小dp[][]值所以必须初始dp[][]为inf,同事注意初始的细节问题j原创 2016-01-05 19:19:09 · 509 阅读 · 0 评论 -
NYOJ 214 最长上升子序列加强版(二分+dp)
对于数值范围较大的n求解最长上升序列,用暴力比较肯定不行。那么我们可以用一个dp数组来对这个最长的序列进行标示,其下标代表最长上升序列,dp[top]的值代表满足长度为top的数的最小值。然后依次遍历整个数组a[i]。并且查找a[i],所在dp[]中的位置,返回l,代表a[i]在dp[]中的上升序列值。找到一个和dp[]中相等或小于dp[l]的位置直接将该位置的值赋成a[],然后比较当前的最大长度原创 2015-12-02 16:59:20 · 442 阅读 · 0 评论 -
01 Matrix 杭电2015年12月校赛F (二维DP)
思路:首先计算出,每个点的DP值,而位置上的DP肯定与当前点的左上,上,左三个位置的DP值有关,且必须取三者中值最小的。然后再如何确定每个k*k的矩阵有多少个呢?我们在计算每个DP[][]值的时候可以将其值共有多少记录下来。并且注意到在如果为4*4的矩阵里边必定有一个3*3的矩阵。并且在4*4的矩阵中的这个3*3的矩阵没有被累加过,因为是以当前组成4*4的矩阵右下角开始扩展到。#inc原创 2016-01-02 16:10:00 · 374 阅读 · 0 评论 -
Codeforces 611C:New Year and Domino 二维前缀和
CF上10^8并不会超时(TL为1S)题目大意:在给定的n,m的矩阵中问在以l1,r1,l2,r2为边界的矩阵1*2的骨牌有多少种不同的放法。思路:看了题解才知道这是一种二维前缀和- -。放骨牌的话只有两种放法横着和竖着。那么可以设两个二维数组分别装横与竖着的前缀数组。然后再枚举两个符合的区间。#include#include#include#include#inc原创 2016-01-02 14:04:13 · 1096 阅读 · 0 评论 -
scu1529: Equator (DP+贪心)
题目大意:有一个成环的序列,求选取其中一个一段最大的连续区间和.思路:1(无环)最大和不在两端,将一个环拆开,求这段序列的最大和.2(有环)最大和在两端,用全部的和减去最小连续区间和.#include #include #include #include #include using namespace std;int a[1000010];i原创 2015-10-11 11:02:44 · 417 阅读 · 0 评论 -
POJ 1836 Alignment(DP LIS)
DescriptionIn the army, a platoon is composed by n soldiers. During the morning inspection, the soldiers are aligned in a straight line in front of the captain. The captain is not satisfied with the原创 2015-08-24 19:49:39 · 540 阅读 · 0 评论