随笔分类 -  DP

摘要:题目传送门 观察数据a*2^b,转化成二进制后,后面跟了b位的0,可以转化为一个分层背包。 先预处理出每个物品是哪一层的,并放在同层内DP。 同层内直接背包,考虑层与层之间的DP。 第一维枚举层数,然后做类似于背包的DP,细节看code。 code: 阅读全文
posted @ 2018-04-14 15:48 Cptraser 阅读(154) 评论(0) 推荐(0)
摘要:题目传送门 看到M<=16经典状态压缩的数据范围,考虑题目。 一道类似于背包的题目。 设f[i][j]表示前i个商店,物品购买状态为j。 先将f[i][j]加上w[i](到i的路费),转移一次,在与同状态的前一商店取min就好了。 code: 阅读全文
posted @ 2018-04-04 10:19 Cptraser 阅读(103) 评论(0) 推荐(0)
摘要:题目传送门 数位DP,其实只要求1~A-1和1~B就可以了。两数相减即为答案。 考虑怎们求1~A。 设f[i][j]表示到第i位,为j的windy数总数。 由前一位差值大于1的方程转移。 但是统计答案要分类讨论。 首先设所求数的位数为len。 1~len-1首先加入答案。 第len位的数-1也可以直 阅读全文
posted @ 2018-04-02 14:17 Cptraser 阅读(183) 评论(0) 推荐(0)
摘要:题目传送门 DP。 但要分类讨论,对于M=1和M=2的情况分别讨论。 1>M=1 设f[i][j]表示选了i个矩阵,到第j位。N^3转移。(前缀和) 2>M=2 设f[i][j][k]表示选了i个矩阵,第一列到i,第二列到j。 枚举i,j,k后枚举j1和k1表示选一行的情况。 如果j==k则可以从之 阅读全文
posted @ 2018-04-02 13:52 Cptraser 阅读(127) 评论(0) 推荐(0)
摘要:题目传送门 区间DP,设f[i][j][0/1]为i~j区间的压缩情况,1表示在插入了一个M。 code: 阅读全文
posted @ 2018-03-30 10:14 Cptraser 阅读(133) 评论(0) 推荐(0)
摘要:题目传送门 一道斜率优化的题目。 但暴力方程很关键。 我们先将x作为关键字Sort一遍,再将y处理成单调递减,即把无用的土地去除。 然后单调队列维护凸包做斜率优化就好了。 code: 阅读全文
posted @ 2018-03-13 18:06 Cptraser 阅读(178) 评论(0) 推荐(0)
摘要:题目传送门 一道斜率优化的题目,加深了印象。 设sum[i]=∑p[i],S[i]=∑p[i]*x[i]。 暴力方程加前缀和优化: 然后变形: 求最小截距,因为k单调,所以是个下凸包,单调队列维护。 //红体字在y相减时会抵消,所以无影响。 code: 阅读全文
posted @ 2018-03-12 10:15 Cptraser 阅读(188) 评论(0) 推荐(0)
摘要:题目传送门 这道题可以很快想到暴力DP的做法: 但是数据范围有50000,这就需要用斜率优化了。 我们设S[i]=C[i]+i(C[i]为前缀和),L++,设j为i的最优决策点。。 原方程就变为: 我们设2*S[i]为k。 相当于这题就变成了求最小的截距f[i]。 假设A,B,C,D为四个决策点。 阅读全文
posted @ 2018-03-10 19:48 Cptraser 阅读(184) 评论(1) 推荐(0)
摘要:题目传送门 这道题苟了我好久,因为链表的内存问题,之后再细讲。 首先这是一道Tarjan+DAG上DP的题目。 有三种门,对于每种门可以和其他门相连。即连边。 使用链表快速查询连边。 建完图后可以进行Tarjan缩点。 然后做一遍DAG上DP就好了。(记搜) 然后因为建图时会有很多条边,而行列最多只 阅读全文
posted @ 2018-03-01 15:26 Cptraser 阅读(197) 评论(0) 推荐(0)
摘要:题目传送门 刚开始是看到这道题目还以为是序列连续的。 当然了,序列可以不连续。 设f[i]表示到第i位时的序列的最长长度。 取cnt=Max f[j]+1,然后转移回去使f[j]=cnt。 这是为了让下次转移时能最优。 可以对读入数组进行滚动。 code: 阅读全文
posted @ 2018-02-12 08:38 Cptraser 阅读(150) 评论(0) 推荐(0)
摘要:题目传送门 第一次看题目感觉毫无还手之力,一看M的范围≤15,果断状压。 但是状压的想法比较新奇。 先想到的状压是设f[i][j]表示前i个状态为j时的方案总数,但是后来想了一想不行,会超时。 于是以f[i][j]表示i状态匹配到第j位时的方案总数。 但判断转移是会超时,于是预处理串与串之间的关系。 阅读全文
posted @ 2018-01-29 15:43 Cptraser 阅读(118) 评论(0) 推荐(0)
摘要:题目传送门 看到数据范围就果断装压。 设f[i][j]表示i状态下最后一个数字为a[j]。 code: 阅读全文
posted @ 2018-01-24 18:58 Cptraser 阅读(129) 评论(0) 推荐(0)
摘要:题目传送门 这道题比较水,设f[i][j]表示i~j区间合并的最大值。 #include <cstdio> #define max(a,b) a>b?a:b using namespace std; int N,x,f[250][250],ans; int main(){ scanf("%d",&N 阅读全文
posted @ 2017-10-22 19:24 Cptraser 阅读(182) 评论(0) 推荐(0)
摘要:题目传送门 题目大意:给定一棵K叉树,一个节点下的K个节点的分数为i,求包含大于等于D的边的总分数为N的方案总数,mod 1e9+7。 这是一道很好的树形DP题,首先看N和K两个条件,可以轻易的得到方程: //f[i][j]表示总分为i,当前边分数到j的方案总数。 再看最后一个条件,我们仔细一想,不 阅读全文
posted @ 2017-10-14 22:26 Cptraser 阅读(246) 评论(0) 推荐(0)
摘要:题目传送门 这是一道DP+最短路径的好题。 首先预处理每天每个点的最短路径。 用SPFA进行处理。即cost[i][j]为第i天到底j天的1到M点的最小花费。 就可以水水的DP。 设f[i]为第i天的最优方案,f[i]=min(f[i],f[j]+cost[j+1][i]*(i-j)+K); 即从第 阅读全文
posted @ 2017-09-29 18:52 Cptraser 阅读(179) 评论(0) 推荐(0)
摘要:题目传送门 我们设f[i]表示用机器A加工,时间还剩下i时的最优加工时间。 对于每一个时间可以加工的物品,有以下几个选择: 1、用机器A加工 2、用机器B加工 3、A和B一起加工 所以得到方程: f[j]+=a[i][2]//用机器B加工,所以时间还剩j。 f[j]=min(f[j],f[j-a[i 阅读全文
posted @ 2017-09-26 09:56 Cptraser 阅读(205) 评论(0) 推荐(0)
摘要:WZRY 为了排位赛的Cjj神,最近耗尽气力来打WZRY。 Cjj神最近有N局预约的排位赛,其中第i局需要耗时Li的时间。因为浓浓的Gay情,Cjj神不能改变这些排位赛的的顺序。作为一个很有(mei)自制力的人,Cjj神计划用M+1天打完N局,为了能够活着见到第M+2天的太阳,他希望耗时最长的一天最 阅读全文
posted @ 2017-09-25 19:16 Cptraser 阅读(442) 评论(0) 推荐(0)
摘要:最小覆盖(cover)、、线段树 【题目描述】 给定 N 个区间[Li,Ri],需要你按照顺序选出一个区间序列使得[1,M]完全被覆盖。并且在选出来的序列中,某个区间[a,b]之前必须保证[1,a]都被已经选中的区间覆盖(即没有“断开”的地方)。求出最少需要选多少区间 【输入文件】 第一行两个整数 阅读全文
posted @ 2017-09-25 19:16 Cptraser 阅读(189) 评论(0) 推荐(0)
摘要:题目传送门 又是一道BZOJ的水题。 DP,F[i]表示第i只鼹鼠出现后可以砸几只。 F[i]=max(F[i],F[j]+1); 但要满足time[i]-time[j]>=abs(x[i]-x[j])+abs(y[i]-y[j]) code: /************************** 阅读全文
posted @ 2017-09-25 19:16 Cptraser 阅读(95) 评论(0) 推荐(0)
摘要:没有上司的舞会 1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description Ural大学有N个职员,编号为1~N。他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。每个职员有一个快乐指数。现在有个周年庆宴会,要求 阅读全文
posted @ 2017-09-25 19:16 Cptraser 阅读(121) 评论(0) 推荐(0)