【动态规划】线性dp/递推
文章平均质量分 76
线性dp/递推
A_zjzj
衢州华茂外国语学校郑钧
展开
-
洛谷P1020拦截导弹题解--zhengjun
题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是 ≤50000\le 50000≤50000的正整数),计算这套系统最多能拦......原创 2020-02-22 11:21:56 · 4672 阅读 · 2 评论 -
BZOJ1218激光炸弹题解--zhengjun
Description一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标。现在地图上有nnn(n<=10000n<=10000n<=10000)个目标,用整数XiX_iXi,YiY_iYi(其值在[0,5000][0,5000][0,5000])表示目标在地图上的位置,每个目标都有一个价值。激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆破范围,即那个边...原创 2020-02-09 17:29:27 · 798 阅读 · 0 评论 -
洛谷P1002题解--zhengjun
题目描述棋盘上 AAA 点有一个过河卒,需要走到目标 BBB 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 CCC 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,AAA 点 (0,0)(0, 0)(0,0)、BBBB 点 (n,m)(n, m)(n,m),同样马的位置坐标是需要给出的。现在要求你计算出卒从AAA 点能...原创 2020-02-10 08:50:22 · 445 阅读 · 0 评论 -
洛谷P1004方格取数题解--zhengjun
题目描述设有 N×NN \times NN×N 的方格图 (N≤9)(N \le 9)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 000。如下图所示(见样例):A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 ...原创 2020-02-10 15:01:05 · 879 阅读 · 0 评论 -
洛谷P1006传纸条题解--zhengjun
题目描述小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个 mmm 行 nnn 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标 (1,1)(1,1)(1,1),小轩坐在矩阵的右下角,坐标 (m,n)(m,n)(m,n)。...原创 2020-02-11 16:13:54 · 818 阅读 · 1 评论 -
洛谷P1025数的划分题解--zhengjun
题目描述将整数nnn分成kkk份,且每份不能为空,任意两个方案不相同(不考虑顺序)。例如:n=7n=7n=7,k=3k=3k=3,下面三种分法被认为是相同的。1,1,5;1,1,5;1,1,5;1,5,1;1,5,1;1,5,1;5,1,1.5,1,1.5,1,1.问有多少种不同的分法。输入格式n,kn,kn,k (6<n≤2006<n \le 2006<n≤20...原创 2020-03-05 15:31:01 · 313 阅读 · 0 评论 -
洛谷P1026统计单词个数题解--zhengjun
题目描述给出一个长度不超过 200200200 的由小写英文字母组成的字母串(该字串以每行 202020 个字母的方式输入,且保证每行一定为 202020 个)。要求将此字母串分成 kkk 份,且每份中包含的单词个数加起来总数最大。每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。例如字符串 this 中可包含 this 和 is,选用 this 之后就不能包含 th。...原创 2020-03-05 16:29:52 · 414 阅读 · 0 评论 -
洛谷P1028数的计算题解--zhengjun
题目描述我们要求找出具有下列性质数的个数(包含输入的自然数nnn):先输入一个自然数nnn(n≤1000n \le 1000n≤1000),然后对此自然数按照如下方法进行处理:不作任何处理;在它的左边加上一个自然数,但该自然数不能超过原数的一半;加上数后,继续按此规则进行处理,直到不能再加自然数为止.输入格式111个自然数nnn(n≤1000n \le 1000n≤1000)输出格...原创 2020-03-07 11:10:35 · 820 阅读 · 1 评论 -
洛谷P1048采药题解--zhengjun
题目描述辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”如果你是辰辰...原创 2020-04-03 11:53:06 · 974 阅读 · 0 评论 -
洛谷P1049装箱问题题解--zhengjun
题目描述有一个箱子容量为VVV(正整数,0≤V≤200000 \le V \le 200000≤V≤20000),同时有nnn个物品(0<n≤300<n \le 300<n≤30),每个物品有一个体积(正整数)。要求nnn个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。输入格式111个整数,表示箱子容量111个整数,表示有nnn个物品接下来nnn行,分别表示这n...原创 2020-04-03 14:12:14 · 327 阅读 · 0 评论 -
洛谷P1057传球游戏题解--zhengjun
题目描述上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。游戏规则是这样的:nnn个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目。聪明的小蛮提出一个有趣的问题:有多少种不同的传...原创 2020-04-16 16:38:55 · 1095 阅读 · 0 评论 -
洛谷P1060开心的金明题解--zhengjun
题目描述金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NNN元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的NNN元。于是,他把每件物品规定了一个重要度,分为555等:用整数1−51-51−5表示,第555等最重要。他还从因特网上查到了每...原创 2020-04-17 09:27:03 · 626 阅读 · 0 评论 -
洛谷P1070道路游戏题解--zhengjun
题面传送门思路首先,这道题一定是个dpdpdp,因为题中说一旦机器人走到头了,就要立刻在其他任意的一个机器人工厂买。一开始弄得fi,jf_{i,j}fi,j是到了第iii个工厂,用了jjj个时间,机器人已经走到头了的最大金币数,然后一想,似乎不需要前面这一个维度,(我要你有何用),反正下一次都可以在任意的地方干嘛还要这样嘛。所以就用fif_ifi表示用了iii个时间,机器人已经走到头了...原创 2020-04-20 17:08:18 · 357 阅读 · 0 评论 -
洛谷P1077摆花题解--zhengjun
题面传送门思路一看就是一道dpdpdp用fi,jf_{i,j}fi,j表示摆到第iii种花,已经摆了jjj盆花所有的可能性;初始化:f0,0=1f_{0,0}=1f0,0=1状态转移公式:fi,j=∑k=1min(ai,j)fi−1,j−kf_{i,j}=\sum\limits_{k=1}^{min(a_i,j)}f_{i-1,j-k}fi,j=k=1∑min(ai,j)fi...原创 2020-04-21 14:04:40 · 294 阅读 · 0 评论 -
洛谷P1091合唱队形题解--zhengjun
题面传送门思路一看嘛,不就是两遍dpdpdp,结果标签上写着个单调队列,我怎么想不出来如何单调队列啊。于是,就只好打了暴力dpdpdp结果AAA了。代码#include<bits/stdc++.h>using namespace std;int n;int a[101];int f1[101],f2[101];int main(){ scanf("%d",&......原创 2020-04-23 18:41:01 · 293 阅读 · 0 评论 -
洛谷P1095守望者的逃离题解--zhengjun
题面传送门思路因为跑和使用魔法不能同时执行,所以可以先处理光光使用魔法,然后再处理跑的情况代码#include<bits/stdc++.h>using namespace std;int m,s,t;int f[300001]; int main(){ scanf("%d%d%d",&m,&s,&t); for(int i=1;i<=t...原创 2020-04-24 16:09:18 · 399 阅读 · 0 评论 -
洛谷P6289[COCI2016-2017#1]Vještica题解--zhengjun
看数据可以猜测:这是一道状态压缩的动态规划题没错。我们用 fif_ifi 表示在 iii 状态下最少需要多少节点。那么转移方程就是:fi=minj&i=jfj+fi−j−lcp(i)f_i=\min\limits_{j\&i=j}{f_j+f_{i-j}-lcp(i)}fi=j&i=jminfj+fi−j−lcp(i)这个 lcp(i)lcp(i)lcp(i) 就是在 iii 状态下,每一个字符串的最长公共的前缀(只要能并到一起就并到一起)最后,枚举子原创 2020-10-05 16:24:22 · 384 阅读 · 0 评论 -
加拿大国赛CCC2014 S5 题解--zhengjun
首先,可以爆搜,不过分比较少。然后,我们可以算出每条边,然后把边按照距离排个序。就可以转换成线性 dpdpdp用 fif_ifi 表示到了第 iii 条边最多可以拿到几个点心但是,还有一点要考虑,如果有一坨边的距离都一样,那么应该取走那条边呢。所以,我们可以另外开一个数组记录一下就可以了代码#include<cstdio>#include<algorithm>using namespace std;int n,m,tot,x[2001],y[2001];stru原创 2020-10-07 15:27:12 · 631 阅读 · 0 评论 -
洛谷P1987 摇钱树题解--zhengjun
首先,如果 nnn 个都要选,那么显然,应该先把 bbb 值大的先选掉,这样浪费最小。基于这种想法之上,我们就可以先按 b 排个序,然后 dpdpdp用 fi,jf_{i,j}fi,j 表示在前 iii 个中选了 jjj 个的最大金币数所以递推式就十分显然,fi,j=max(fi−1,j+fi−1,j−1+max(0,ai−pi×(j−1)))f_{i,j}=\max(f_{i-1,j}+f_{i-1,j-1}+\max(0,a_i-p_i\times (j-1)))fi,j=max(fi−1原创 2020-10-07 15:39:46 · 349 阅读 · 1 评论 -
leetcode188. 买卖股票的最佳时机 IV
先用 fi,jf_{i,j}fi,j 表示第 iii 次交易,这次交易到 jjj 的最大利润。这样 fif_ifi 就可以从 fi−1f_{i-1}fi−1 那里直接得到,(参见leetcode123. 买卖股票的最佳时机 III–zhengjun还要注意一下空间,要滚动代码class Solution {public: int n,f[2][10001]; int maxProfit(int k,vector<int>& a) { int原创 2020-10-20 20:21:47 · 230 阅读 · 1 评论 -
leetcode309. 最佳买卖股票时机含冷冻期--zhengjun
因为这里有一个冷冻期,这就十分不好处理。所以我们用 fi,0f_{i,0}fi,0 表示当前买来了股票,fi,1f_{i,1}fi,1 表示当前没有股票,处于冷冻期,fi,2f_{i,2}fi,2表示当前没有骨片也不处于冷冻期。(这个不一定是要在 iii 这个点满足条件,也可以在 1→i1\to i1→i 之间某个值满足这个东西)转移方程显然是f[i][0]=max(f[i-1][2]-a[i],f[i-1][0]);f[i][1]=max(f[i-1][0]+a[i],f[i-1][1]);原创 2020-10-20 20:30:24 · 125 阅读 · 1 评论 -
leetcode714. 买卖股票的最佳时机含手续费--zhengjun
用 fi,0f_{i,0}fi,0 表示到了第 iii 天,当前买了股票的最大利润;fi,1f_{i,1}fi,1 表示到了第 iii 天,当前没有买股票的最大利润。(还是不一定要刚好第 iii 天满足这个条件,可以 1→i1\to i1→i 中的某个值满足)显然,递推式就是f[i][0]=max(f[i-1][0],f[i-1][1]-a[i]);f[i][1]=max(f[i-1][1],f[i-1][0]+a[i]-k);//注意要在卖出的时候付这个手续费代码class Solutio原创 2020-10-20 20:36:10 · 119 阅读 · 0 评论