动态规划
动态规划刷题总结
Suprit
先选择一种经历,经历再造就一个人
展开
-
【题解】PATA1007 Maximum Subsequence Sum (25 分)⭐⭐⭐ 【连续子序列和】
PATA1007 Maximum Subsequence Sum (25 分)题意:求连续子序列和给出N个数, 问最大的连续若干数的和是多少, 并输出左右边界元素的值如果所有数都小于0,那么认为最大的和为0,并且输出首尾元素题解:比较简单的dp问题, 设置一个last值保存上一次可取的最左区间, tmp表示当前的和遍历数组, 依次累加入tmp, 如果tmp<0, 则负数没有必要...原创 2019-11-20 10:44:00 · 260 阅读 · 0 评论 -
Max Sum Plus Plus HDU - 1024 (dp)
A - Max Sum Plus Plus HDU - 1024Now I think you have got an AC in Ignatius.L’s “Max Sum” problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with...原创 2019-02-22 09:55:00 · 2037 阅读 · 5 评论 -
【题解】Dima and Salad CodeForces - 366C⭐⭐⭐ 【01背包 思维】
Dima and Salad CodeForces - 366C 有n个水果, 每个水果都有两个属性值ai表示美味程度, bi表示能量值, 现在要求选出一个或多个水果, 使得选出的水果的ai和与bi和的比例是k 问在这种清形可能出现的情况下ai的和最多是多少, 如果这样的情形不存在输出 -1Input第一行包含两个整数n, k (1 ≤ n ≤ 100, 1 ≤ k ≤ 10). 第二行为 ...原创 2019-03-19 19:23:44 · 1109 阅读 · 0 评论 -
Ignatius and the Princess III HDU - 1028 (划分数模板题) 附划分数详细讲解
Ignatius and the Princess III HDU - 1028 “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 integ...原创 2019-03-20 17:26:16 · 588 阅读 · 0 评论 -
蓝桥杯 历届试题 地宫取宝(记忆化搜索 好题)
历届试题 地宫取宝 X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。地宫的入口在左上角,出口在右下角。小明被带到地宫的入口,国王要求他只能向右或向下行走。走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。...原创 2019-03-21 16:05:43 · 592 阅读 · 0 评论 -
拦截导弹 OpenJ_Bailian - 2945 (LIS)
拦截导弹 OpenJ_Bailian - 2945 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹。拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹...原创 2019-04-01 15:08:01 · 195 阅读 · 0 评论 -
CCPC河南省赛 最大下降矩阵 (LIS)
CCPC河南省赛 最大下降矩阵Input我们称一个矩阵是下降矩阵,当且仅当,矩阵的每一列都是严格下降的。很显然,这个要求很苛刻,大多数矩阵都无法满足。但是显然如果消去一些行,一定可以使得这个矩阵变成下降矩阵。现在给出一个n行m列的矩阵,请你求出最少消去多少行,可以使得这个矩阵变为下降矩阵。Input输入第一行包含两个正整数n,m分别表示矩阵的行数和列数。(1<=n,m<=3...原创 2019-04-15 19:57:28 · 274 阅读 · 0 评论 -
【题解】Apple Catching POJ - 2385 ⭐⭐【dp 奇偶性】
Apple Catching POJ - 2385 有两棵APP树,编号为1,2.每一秒,这两棵APP树中的其中一棵会掉一个APP.每一秒,你可以选择在当前APP树下接APP,或者迅速移动到另外一棵APP树下接APP(移动时间可以忽略不计),但由于却乏锻炼,你最多移动W次.问在T秒内,你最多能收集多少个APP.假设你开始站在1号APP树下.Input第1行:两个整数T(1 < = T&...原创 2019-05-19 20:55:56 · 748 阅读 · 0 评论 -
【详解】Ant Counting POJ - 3046 ⭐⭐⭐ 【多重集组合数】
Ant Counting POJ - 3046 贝西有T种蚂蚁共A只,每种蚂蚁有Ni只,同种蚂蚁不能区分,不同种蚂蚁可以区分,记Sumi为i只蚂蚁构成不同的集合的方案数,问Sumk(S≤k≤B)之和。Input第一行4个整数T、A、S、B。 接下来A行,每行一个整数,代表这只蚂蚁的种类。Output输出Sumk(S≤k≤B)之和。 (数据范围见原文)ExamplesSample In...原创 2019-05-20 11:33:05 · 533 阅读 · 0 评论 -
【题解】切割回文 OpenJ_Bailian - 4122 ⭐⭐【经典问题】
切割回文 OpenJ_Bailian - 4122 阿福最近对回文串产生了非常浓厚的兴趣。如果一个字符串从左往右看和从右往左看完全相同的话,那么就认为这个串是一个回文串。例如,“abcaacba”是一个回文串,“abcaaba”则不是一个回文串。阿福现在强迫症发作,看到什么字符串都想要把它变成回文的。阿福可以通过切割字符串,使得切割完之后得到的子串都是回文的。现在阿福想知道他最少切割多少次...原创 2019-05-21 10:25:24 · 995 阅读 · 0 评论 -
【题解】Coins POJ - 1742 ⭐⭐ 【dp 多重部分和】
Coins POJ - 1742 给出硬币面额及每种硬币的个数,求从1到m能凑出面额的个数。Input多组数据,每组数据前两个数字为n,m。n表示硬币种类数,m为最大面额,之后前n个数为每种硬币的面额,后n个数为相应每种硬币的个数。 (n<=100,m<=100000,面额<=100000,每种个数<=1000)OutputRTExamplesSample I...原创 2019-05-16 15:12:44 · 539 阅读 · 0 评论 -
【详解】历届试题 对局匹配 ⭐⭐⭐⭐ 【好题 dp 贪心 思维】
历届试题 对局匹配小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起。如果两人分差小于或大于K,系统都不会将他们匹配。现在小明知道这个网站总共有N名用户,以及他们的积分分别是A1, A2, … AN。小明想了解最多可能有多少名用户同时在线寻找对手,但是系统却一场对局都...原创 2019-05-22 09:47:59 · 486 阅读 · 0 评论 -
【详解】Sumsets POJ - 2229 ⭐⭐ 【经典问题 二次幂和】
Sumsets POJ - 2229 找一些2^x(0<=x),使它们的和为N。比如,N=7:1+1+1+1+1+1+11+1+1+1+1+21+1+1+2+21+1+1+41+2+2+21+2+4(1 <= N <= 1,000,000).InputN.Output排列方式总数。由于这个数可能很大,只需要保留最后9位ExamplesSample ...原创 2019-05-27 10:01:31 · 469 阅读 · 0 评论 -
【题解】coderforce1196 D2. RGB Substring (hard version)⭐⭐⭐ 【前缀和 dp】
coderforce1196 D2. RGB Substring (hard version)The only difference between easy and hard versions is the size of the input.You are given a string s consisting of n characters, each character is ‘R’,...原创 2019-07-27 10:03:54 · 433 阅读 · 0 评论 -
【题解】计蒜客 Dawn-K's water⭐⭐【完全背包】
Dawn-K’s waterDawn-K recently discovered a very magical phenomenon in the supermarket of Northeastern University: The large package is not necessarily more expensive than the small package.On this d...原创 2019-09-14 21:45:52 · 466 阅读 · 0 评论 -
Largest Rectangle in a Histogram HDU - 1506 (DP 单调栈 思维) 详细题解
题意: 给出若干连续的矩形高度(如图), 宽度为1, 求最大的矩形面积题解: 这是一道非常不错的题目, 简单总结一下这类题的惯用思路对于这种拿到就有思路的题目, 我们不妨先考虑惯用思路, 也就是枚举每一个hi, 再分别左右扫描, 很显然n^2的复杂度, 一定会超时, 我们不妨再来考虑哪里可以拿来优化.这一个思路超时的关键就在于里面似乎存在了大量的重复计算, 可以试想扫描hi高度时, 很多比...原创 2019-02-02 10:30:34 · 305 阅读 · 1 评论 -
【题解】leetcode 322 Coin Change⭐⭐ 【完全背包】
凑钱问题可以说是一类非常经典的算法了, 也就是给你一堆相应面额的钱币, 要求用最少的钱币数凑出一个数, 通常会用贪心和动态规划两种算法用贪心算法的情况一般只有一种, 就是各个面额之间没有公因子的情况, 比如人民币, 就分为1, 5, 20, 50, 100; 这样的话每次就尽量取最大的就好了可如果像这道题一样, 面额是随机输入的, 比方说我输入的是2, 3那么凑的话就不能按照贪心来凑了...原创 2018-11-05 22:23:15 · 471 阅读 · 0 评论 -
Dividing the Path POJ - 2373 详细题解 (线性DP + 单调队列优化)
题意: 在长为L(<=1000000)的草地(可看成线段)上装喷水头,喷射是以这个喷水头为中心,喷水头的喷洒半径是可调节的,调节范围为[a,b]。要求草地的每个点被且只被一个喷水头覆盖,并且有些连续区间必须被某一个喷水头覆盖而不能由多个喷头分段完全覆盖,求喷水头的最小数 题解: 这道题目是一道较为复杂的线性Dp题目, 我会按照思路详细列举一些本题解题过程按照动态规划问题的一般...原创 2018-11-07 17:40:11 · 530 阅读 · 1 评论 -
Poj百练 1163:The Triangle (分类:动态规划)
这道题可以说是入门动态规划的一道基础题了。仔细分析就可以得出算法。题中还可以使用滚动数组来减少空间复杂度,因为只用到了maxSum数组度最后一行。但这里因为时间复杂度不变,所以没有改写。#include <iostream>#include<cstdio>using namespace std;short int tri[110][110];int ma...原创 2018-07-22 15:52:38 · 292 阅读 · 0 评论 -
Poj百练 1458 Common Subsequence (分类:动态规划)
题意: 最长公共子序列#include <iostream>#include<cstdio>#include<cstring>using namespace std;#define MAX_LEN 1000char str1[MAX_LEN];char str2[MAX_LEN];int maxLen[MAX_LEN][MA...原创 2018-07-21 20:01:14 · 320 阅读 · 0 评论 -
Poj百练 2711:合唱队形 (分类:动态规划)
//合唱队形#include <iostream>#include<cstdio>using namespace std;int N;int main(){ scanf("%d",&N); int h[N+5]; for(int i = 1; i<= N; i++) scanf("%d",&...原创 2018-08-05 22:49:02 · 951 阅读 · 0 评论 -
计蒜客-The Heaviest Non-decreasing Subsequence Problem(动态规划)
这道题看起来不难,本来没看数据大小,写了一个n^2的最长上升子序列常规解法,结果超时了。回来一看这数据量确实有点大。然后发现这道题用到的是最长上升子序列的nlogn解法,不太了解的同学可以参见我这篇博客。https://blog.csdn.net/a1097304791/article/details/82286906然后把小于0的数去掉,大于等于10000连写5遍就可以直接套板子了...原创 2018-09-01 15:11:47 · 299 阅读 · 0 评论 -
Poj百练 2533:Longest Ordered Subsequence(分类:动态规划)
题意: 给出n个数, 求最长有序子序列(升序)这道题可以说是动态规划问题的一道经典的不能再经典的题目,请反复琢磨理解,这道题太重要了!我们来分析一下,按照动态规划问题的一般解题思路。第一步,寻找子问题。猛一看可以想到的子问题大概有两个1.maxLen[i]:以i结尾的最长子序列长度 2.maxLen[i][j]以i开始j结尾的最长子序列的长度。 首先来看第一种方法,...原创 2018-07-26 14:54:06 · 350 阅读 · 0 评论 -
由01背包问题谈动态规划 Charm Bracelet POJ - 3624
01背包问题是一道极其经典的线性规划入门问题,这道题也是Poj上的一道经典题目。简单回顾 动态规划, 又称dp(Dynamic programming), 是一类极其常见而重要的算法. 其来源最早来源于递推和搜索, 所以动态规划又称为记忆化搜索, 在性质上又和贪心算法极为类似, 大概具备以下几种特性 1.无后效性, 当前状态一旦确定, 今后不会再影响到当前状态...原创 2018-08-09 16:34:01 · 405 阅读 · 0 评论 -
Poj百练 2755: 神奇的口袋(分类:动态规划)
一道简单的线性规划问题,其实一切能够思考出递推关系的问题都可以用动态规划的思路来解决~直接上代码,子问题和转移方程都写在注释里了!这道题还可以用滚动数组来优化一下,因为比较懒。。所以没做,但是也可以过了//Poj百练2755神奇的口袋#include <iostream>#include<cstdio>#include<cstring>...原创 2018-08-10 23:08:25 · 731 阅读 · 0 评论 -
Robberies HDU - 2955 (01背包 + 概率转换)
01背包问题牵扯到两个基本的属性: 容量和价值, 如果直观的照搬01背包问题的话, 那么容量和价值应该是逃跑概率和钱数.但因为概率是一个浮点数, 而且题目也没有给定最小是几位小数, 所以无法遍历那么就只能把容量定义为可得到的金钱, dp[v] 即为安全的概率, 题中给出的是被抓的概率, 但因为如果用被抓的概率在初始化上会有些麻烦, 所以干脆定义为不被抓, 也就是安全的概率反而比较简单....原创 2018-10-31 16:57:51 · 604 阅读 · 0 评论 -
Bone Collector HDU - 2602 (01背包问题)
真正的01背包问题#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <string>#include <vector>#include <queue>#include <...原创 2018-10-31 17:37:28 · 194 阅读 · 0 评论 -
Piggy-Bank HDU - 1114 (完全背包) 由完全背包问题谈动态规划
完全背包问题是一个很经典的动态规划问题有n中价值和重量分别为wi, vi的物品, 从中选任意数量总重量不超过m的物品, 使得总价值最大, 每种物品可以挑任意次直观思考的话, 由01背包问题来思考, 引入一个遍历k, 可得到以下状态转移方程dp[i][j] = max{dp[i-1][j-w[i]*k] + k*v[i] | j >= w[i]*k } (0 <= k &l...原创 2018-10-30 19:35:27 · 481 阅读 · 0 评论 -
The Triangle POJ - 1163 (dp水题)
dp基础的不能再基础的题#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <string>#include <vector>#include <queue>#include &原创 2018-11-01 20:44:32 · 205 阅读 · 0 评论 -
滑雪 POJ - 1088 (基础dp)
这道题是一道比较基础的dp问题, 最开始我用成Dfs来写, 不出意外果然超时了定义这道题的状态dp[i][j]为 : 从i行j列出发的最大滑行长度状态转移方程应该就是: dp[i][j] = max(dp[i][j], dp[i-1][j] | h[i][j] > h[i-1][j]), max(dp[i][j], dp[i+1][j] | h[i][j] > h[i+1...原创 2018-11-04 09:29:32 · 562 阅读 · 0 评论 -
开餐馆 OpenJ_Bailian - 4118 (动态规划 + 滚动数组)
这题还算是一道比较基础的动态规划问题啦, 和01背包问题略有类似, 都需要考虑容量和复杂度优化, 之前定义状态总想着能二维就二维, 现在看来很多时候其实可以直接用一维的思路去定义状态, 反而会简便很多定义dp[i] : 前i个地点产生的最大利润(题目给出已排序的坐标, 省去了排序)然后考虑到对于每个地点我们都有选与不选两种操作, 考虑需要再添加一个循环j : 来考虑第j个地点是否会是最...原创 2018-11-04 20:37:06 · 450 阅读 · 0 评论 -
【算法笔记】最长上升子序列(nlog解法)
最长上升子序列可以说是一道动态规划(n^2解法)的经典题目了吧,很早前就A掉了,也没有再研究,最近才发型最长上升子序列问题竟然有nlogn解法。仔细研究了一下,发现解法中的一个思维的确非常巧妙,今天在此详细讲解一下,简单说一下我的理解。先上代码,先简单看一下程序就行,讲解在后面#include<stdio.h>#include<algorithm>#inc...原创 2018-09-01 14:40:05 · 698 阅读 · 0 评论