随笔分类 -  动态规划

摘要:题目链接 Maximum Element 题意 现在有这一段求序列中最大值的程度片段: (假定序列是一个1-n的排列) 显然这段程序是错误的……有很多可以X掉这段程序的排列 求这样的排列有多少个。 题目是让我们求符合这样条件的排列个数: 1、存在某个数,他比前面的数都大并且小于$n$; 2、他比他后 阅读全文
posted @ 2017-12-01 01:37 cxhscst2 阅读(366) 评论(0) 推荐(0)
摘要:题目链接 Yet Another Minimization Problem 题意 给定一个序列,现在要把这个序列分成k个连续的连续子序列。求每个连续子序列价值和的最小值。 设$f[i][j]$为前$i$个数分成$j$段的最优解 不难得出状态转移方程$f[i][j] = min(f[k][j - 1] 阅读全文
posted @ 2017-10-10 09:59 cxhscst2 阅读(475) 评论(0) 推荐(0)
摘要:题目链接 Flights for Regular Customers 首先按照$d$的大小升序排序 然后分成$m$个时刻,每条路径一次处理过来。 $can[i][j]$表示当前时刻$i$能否走到$j$ $can$通过上一条路径后的$can$和当前的可行路径矩阵的$d$次幂得到。 这由$floyd$求 阅读全文
posted @ 2017-10-05 00:58 cxhscst2 阅读(491) 评论(0) 推荐(0)
摘要:题目链接 BZOJ 3675 首先最后的答案和分割的顺序是无关的, 那么就可以考虑DP了。 设$f[i][j]$为做了$i$次分割,考虑前$j$个数之后的最优答案。 那么$f[i][j] = max(f[i - 1][p] + (s[i] - s[p]) * s[p])$ 时间复杂度为$O(kn^{ 阅读全文
posted @ 2017-09-26 00:35 cxhscst2 阅读(182) 评论(0) 推荐(0)
摘要:题目链接 Fire 题意 有n个物品,每个物品的挽救时间代价为ti, 消失时刻为di, 价值为pi。 如果要救某个物品,必须在他消失之前救出来。 同一时刻最多只能救一件物品。 当前耗时为当前已经救出的物品的ti累积。 你需要救出总价值尽可能大的物品,并输出方案。 考虑DP f[i][j]为考虑前i个 阅读全文
posted @ 2017-09-26 00:15 cxhscst2 阅读(294) 评论(0) 推荐(0)
摘要:题目链接 Animals and Puzzle 题意 给出一个1e3 * 1e3的01矩阵,给出t个询问,每个询问形如x1,y1,x2,y2 你需要回答在以$(x1, y1)$为左上角,$(x1, y2)$为右下角的子矩阵中,最大的全1正方形的边长。 首先考虑DP预处理。 $f[i][j]$表示以$ 阅读全文
posted @ 2017-09-22 19:19 cxhscst2 阅读(397) 评论(0) 推荐(0)
摘要:题目链接 Sonya and Problem Wihtout a Legend 题意 给定一个长度为n的序列,你可以对每个元素进行$+1$或$-1$的操作,每次操作代价为$1$。 求把原序列变成严格递增子序列的所需最小花费。 考虑$DP$。 首先比较常见的套路就是把每个$a[i]$减去$i$,然后把 阅读全文
posted @ 2017-09-22 18:56 cxhscst2 阅读(282) 评论(0) 推荐(0)
摘要:题目链接 Round Subset 题意 在n个数中选择k个数,求这k个数乘积末尾0个数的最大值。 首先我们预处理出每个数5的因子个数c[i]和2的因子个数d[i] 然后就可以背包了。 设f[i][j]为选i个数,5的因子总和为j时,2的因子总和的最大值。 则状态转移方程为 $f[i][j] = m 阅读全文
posted @ 2017-09-16 22:01 cxhscst2 阅读(242) 评论(0) 推荐(0)
摘要:题目链接 Strip 题意 把一个数列分成连续的$k$段,要求满足每一段内的元素最大值和最小值的差值不超过$s$, 同时每一段内的元素个数要大于等于$l$, 求$k$的最小值。 考虑$DP$ 设$dp[i]$为前$i$个数字能划分成区间个数的最小值。 则$dp[i] = min(dp[j] + 1) 阅读全文
posted @ 2017-09-13 16:23 cxhscst2 阅读(346) 评论(0) 推荐(0)
摘要:题目链接 HDU6149 百度之星复赛的题目……比赛的时候并没有做出来。 由于低点只有15个,所以我们可以考虑状压DP。 利用01背包的思想,依次考虑每个低点,然后枚举每个状态。 在每个状态里面任意枚举不在这个状态中的两个点,如果能构成一个valley,那么更新答案。 阅读全文
posted @ 2017-09-12 23:06 cxhscst2 阅读(233) 评论(0) 推荐(0)
摘要:题目链接 Turning in Homework 考虑区间DP $f[i][j][0]$为只考虑区间$[i, j]$且最后在$a[i]$位置交作业的答案。 $f[i][j][1]$为只考虑区间$[i, j]$且最后在$a[j]$位置交作业的答案。 首先对$a[i]$升序排序(位置第一关键字,时间第二 阅读全文
posted @ 2017-09-09 20:33 cxhscst2 阅读(199) 评论(0) 推荐(0)
摘要:题目链接 Valid Sets 题目要求我们在一棵树上计符合条件的连通块的个数。 满足该连通块内,点的权值极差小于等于d 树的点数满足 n <= 2000 首先我们先不管这个限制条件,也就是先考虑d为正无穷大的时候的情况。 我们要求出树上所有连通块的个数。 这个时候我们令f[i]为以i为根的子树中的 阅读全文
posted @ 2017-08-23 16:24 cxhscst2 阅读(372) 评论(0) 推荐(0)
摘要:题目链接 The Bakery 题目大意:目标是把$n$个数分成$k$组,每个组的值为这个组内不同的数的个数,求$k$个组的值的和的最大值。 题目分析: 这道题我的解法可能和大众解法不太一样……我用主席树求$ask(l, r)$——$l$到$r$之间有多少个不同的数。 然后就是$DP$了。 这道题的 阅读全文
posted @ 2017-08-14 21:47 cxhscst2 阅读(299) 评论(0) 推荐(0)
摘要:题目链接 Gold miner 目标是要在规定时间内获得的价值总和要尽可能大。 我们先用并查集把斜率相同的物品分在同一个组。 这些组里的物品按照y坐标的大小升序排序。 如果组内的一个物品被选取了,那该组排在他前面的所有物品肯定被选取了。 那么我们对每个组的所有物品,对价值和代价分别求前缀和。 那么选 阅读全文
posted @ 2017-08-14 21:32 cxhscst2 阅读(197) 评论(0) 推荐(0)
摘要:题目链接 字符串折叠 区间DP。$f[l][r]$为字符串在区间l到r的最小值 正常情况下 $f[l][r] = min(f[l][r], f[l][l+k-1]+f[l+k][r]);$ 当$l$到$r$以$k$为周期时 $f[l][r] = min(f[l][r], 2+sz(k)+f[l][l 阅读全文
posted @ 2017-08-01 22:57 cxhscst2 阅读(247) 评论(0) 推荐(0)
摘要:题目链接 木棍分割 1044: [HAOI2008]木棍分割 Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连 接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长度最小, 并且输出有多少种砍的方法使 阅读全文
posted @ 2017-07-31 10:47 cxhscst2 阅读(470) 评论(0) 推荐(0)
摘要:题目链接 Treeland Tour 题目就是让你求树上LIS 先离散化,然后再线段树上操作。一些细节需要注意一下。 阅读全文
posted @ 2017-07-21 22:12 cxhscst2 阅读(507) 评论(0) 推荐(0)
摘要:题目链接 课程学分总数 很基础的树型DP。注意输入数据可能是森林而不是完整的一棵树。 题目链接 课程学分总数 那么给所有没有祖先的点加一个公共的根就好了。 #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for ( 阅读全文
posted @ 2017-07-20 20:28 cxhscst2 阅读(255) 评论(0) 推荐(0)
摘要:题目链接 Favorite Color Stripe 题意:给定$A$序列和$B$序列,你需要在$B$序列中找出任意一个最长的子序列,使得这个子序列也是$A$的子序列 (这个子序列的相邻元素可以重复) 只要求出这个子序列长度的最大值即可 很基础的DP题,设$f[i]$为当前以$a[i]$结尾的子序列 阅读全文
posted @ 2017-07-17 22:23 cxhscst2 阅读(190) 评论(0) 推荐(0)
摘要:题目链接 All Roads Lead to Rome 题目大意:求符合题意(三关键字)的最短路。并且算出路程最短的路径有几条、 思路:求最短路并不难,SPFA即可,关键是求总路程最短的路径条数。 我们令$h[i][j]$为$i$到$j$的最短路,$g[i][j]$为$i$到$j$的最短路条数。 $ 阅读全文
posted @ 2017-07-17 00:32 cxhscst2 阅读(299) 评论(0) 推荐(0)