![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
文章平均质量分 77
MaverickFW
It's Maverick
展开
-
【HDU3045】【斜率优化DP】Picnic Cows题解
Picnic CowsIt’s summer vocation now. After tedious milking, cows are tired and wish to take a holiday. So Farmer Carolina considers having a picnic beside the river. But there is a problem, not all the原创 2017-05-19 17:08:19 · 460 阅读 · 0 评论 -
【BZOJ1026】【数位DP】windy数 题解
Description windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道, 在A和B之间,包括A和B,总共有多少个windy数?Input 包含两个整数,A B。Output 一个整数Sample Input【输入样例一】1 10【输入样例二】25 50 Sample Output【输出样例一】9【输出样例二】20 HI原创 2017-09-29 20:05:08 · 329 阅读 · 0 评论 -
【DP】hotel 题解 浅谈动态规划中的状态设计方法
有n个房间,每个房间里有少于七个人,两个相邻房间距离为一,每个房间可以住0或4或7个人,求总移动距离最小。 直观感受DP设计为dp[i][j],第一维表示房间,第二位表示人数,然后发现根本做不了。(欢声笑语打出GG) 那么我们不妨想象每两个房间之间有一条通道,每条通道单向通过的最多人数不超过7。(可以通过反证法得出通过超过7一定不优) 于是有了巧妙的状态设计,dp[i][j]第一维表示第i条通原创 2017-10-10 16:53:55 · 434 阅读 · 0 评论 -
【DP】Gray 题解
给出一个定长不完全确定数位的二进制数,给出每一位分值,求对应格雷码得分最大。由于当前状态只与前一位有关,于是设计dp[i][j],第一维位数,第二位是0或1,表示最大分数。#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <set>#include <queue>#include原创 2017-10-10 19:38:21 · 275 阅读 · 0 评论 -
【DP】【斜率优化】【单调队列优化】Gift 题解
给出起点终点,给出m个点,每个点可以延伸l的区间,每个单位得分为w,求最大得分。Dp[i][j]表示前i个人装饰前j个单位能得到的最大得分 易得出朴素方程 Dp[i][j]=max(dp[i-1][k]+(j-k)*w);(k+1<=原始位置<=j) 之后随便斜率或者单调队列优化。#include <iostream>#include <cstdio>#include <cstring>原创 2017-10-10 19:48:44 · 363 阅读 · 0 评论 -
【DP】【01背包】【完全背包】Birthday 题解
n个物品m元钱,每个物品给出单价、权值以及第一次购买时赠送的权值其实就是01背包和完全背包套一起,解法其实写一个背包判一个也可以过#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <set>#include <queue>#include <algorithm>#include原创 2017-10-10 19:57:54 · 320 阅读 · 0 评论 -
【状压DP】chess 题解
给出一个n*m的01矩阵,里面为0的点不能放旗子,两个相邻的格子不能放旗子,求放法种数。 n,m<12裸的状压DP,15行,每行一个12位01串表示。check就与一下。#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <set>#include <queue>#include原创 2017-10-10 20:01:48 · 295 阅读 · 0 评论 -
【DP】【单调栈】question 题解
给一个01矩阵,求1覆盖的最大矩形面积。统计每一个位置高度,单调栈维护,顺着跑一遍。#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <set>#include <queue>#include <algorithm>#include <vector>#include <cst原创 2017-10-10 20:07:40 · 260 阅读 · 0 评论 -
【DP】【拓扑排序】road 题解
给一个图,从一个入度为零的点到一个出度为零的点,求点权和最大。跑dp的同时也要跑拓扑排序,dp[i]表示从一个入度为0的点到i位置的最大分数。然后将i之后的点全部入度减1,接着进行dp。#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <set>#include <queue>#原创 2017-10-10 20:12:23 · 465 阅读 · 0 评论 -
【BZOJ3812】【状压DP】【容斥原理】主旋律 题解
Description响应主旋律的号召,大家决定让这个班级充满爱,现在班级里面有 n 个男生。 如果 a 爱着 b,那么就相当于 a 和 b 之间有一条 a→b 的有向边。如果这 n 个点的图是强联通的,那么就认为这个班级是充满爱的。 不幸的是,有一些不好的事情发生了,现在每一条边都可能被摧毁。我作为爱的使者,想知道有多少种摧毁的方式,使得这个班级任然充满爱呢?(说人话就是有多少边的子集删去之后原创 2017-10-11 09:40:08 · 457 阅读 · 0 评论 -
【BZOJ4726】【树形期望DP】[POI2017]Sabota? 题解
Description某个公司有n个人, 上下级关系构成了一个有根树。其中有个人是叛徒(这个人不知道是谁)。对于一个人, 如果他 下属(直接或者间接, 不包括他自己)中叛徒占的比例超过x,那么这个人也会变成叛徒,并且他的所有下属都会变 成叛徒。你要求出一个最小的x,使得最坏情况下,叛徒的个数不会超过k。 Input第一行包含两个正整数n,k(1<=k<=n<=500000)。 接下来n-1行原创 2017-10-29 18:20:18 · 494 阅读 · 0 评论 -
【BZOJ4562】【拓扑排序】【DP】[Haoi2016]食物链 题解
Description如图所示为某生态系统的食物网示意图,据图回答第1小题 现在给你n个物种和m条能量流动关系,求其中的食物链条数。 物种的名称为从1到n编号 M条能量流动关系形如 a1 b1 a2 b2 a3 b3 …… am-1 bm-1 am bm 其中ai bi表示能量从物种ai流向物种bi,注意单独的一种孤立生物不算一条食物链 Input第一行两个整数n和m,接下来m原创 2017-10-12 20:39:59 · 831 阅读 · 0 评论 -
【BZOJ1084】【杂题DP】[SCOI2005]最大子矩阵 题解
Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。注意:选出的k个子矩阵 不能相互重叠。Input 第一行为n,m,k(1≤n≤100,1≤m≤2,1≤k≤10),接下来n行描述矩阵每行中的每个元素的分值(每个元素的 分值的绝对值不超过32767)。Output 只有一行为k个子矩阵分值之和最大为多少。Sample Input3 2 2原创 2017-10-13 21:59:17 · 480 阅读 · 0 评论 -
【BZOJ1419】【期望DP】Red is good 题解
Description桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。 Input一行输入两个数R,B,其值在0到5000之间 Output在最优策略下平均能得到多少钱。 Sample Input5 1 Sample Output4.166666 HINT输出答案时,小数点后第六原创 2017-11-01 21:12:52 · 469 阅读 · 0 评论 -
【BZOJ2073】【状压DP】[POI2004]PRZ 题解
Description一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍过桥时只能分批过,当一组全部过去时,下一组才能接着过. 队伍里每个人过桥都需要特定的时间,当一批队员过桥时时间应该算走得最慢的那一个,每个人也有特定的重量,我们想知道如何分批过桥能使总时间最少. Inp原创 2017-11-01 21:19:27 · 458 阅读 · 0 评论 -
【DP】【线段树】【树状数组】saber 题解
dp[i] = max{dp[j] (j<i,2(ti-tj)≥|pi-pj|)} 将绝对值拆开变成max(pi-pj,pj-pi) 之后线段树或者树状数组维护DP#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define lowbit(x) x&(-x)using namespace原创 2017-10-06 20:47:19 · 317 阅读 · 0 评论 -
【POJ1260】【斜率优化DP】Pearls题解
PearlsIn 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 family of原创 2017-05-19 17:12:33 · 404 阅读 · 0 评论 -
【POJ1160】【四边形优化DP】Post Office
Post OfficeThere is a straight highway with villages alongside the highway. The highway is represented as an integer axis, and the position of each village is identified with a single integer coordinat原创 2017-05-19 21:55:28 · 498 阅读 · 0 评论 -
【URAL1018】【树形DP】Binary Apple Tree题解
Binary Apple TreeLet’s imagine how apple tree looks in binary computer world. You’re right, it looks just like a binary tree, i.e. any biparous branch splits up to exactly two new branches. We will enu原创 2017-05-19 21:59:47 · 329 阅读 · 0 评论 -
【斜率优化DP】2017.5.20 T2 String题解
Problem 2 (string.cpp/c/pas) 【题目描述】 有一个的字符串S需要拆分成k个串,每一个串需要花费一些代价来维护。对于一个串,其维护的代价为第i个字符在模式串P中的位置pos的(i – pos) * pos之和。现在需要计算出k个串的最小维护代价。 【输入格式】 第一行一个字符串P和一个整数k。 第二行一个字符串S。 【输出格式】 一行,最小维护代价。 【样例原创 2017-05-20 16:35:22 · 429 阅读 · 0 评论 -
【BZOJ2427】【树形DP】【Tarjan】 软件安装 题解
现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi。我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大)。但是现在有个问题:软件之间存在依赖关系,即软件i只有在安装了软件j(包括软件j的直接或间接依赖)的情况下才能正确工作(软件i依赖软件j)。幸运的是,一个软件最多依赖另外一个软件。如果一个软件不能正常工作,那么它能够发挥原创 2017-06-05 18:49:16 · 443 阅读 · 0 评论 -
【BZOJ1833】【数位DP】 count 数字计数
给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次。 Input 输入文件中仅包含一行两个整数a、b,含义如上所述。 Output 输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次。 Sample Input 1 99 Sample Output 9 20 20 20 20 20 20 20 20 20 Hint 30%原创 2017-06-05 19:13:54 · 437 阅读 · 0 评论 -
【BZOJ4145】【装压DP】 The Prices 题解
你要购买m种物品各一件,一共有n家商店,你到第i家商店的路费为d[i],在第i家商店购买第j种物品的费用为c[i][j],求最小总费用。 Input 第一行包含两个正整数n,m(1<=n<=100,1<=m<=16),表示商店数和物品数。 接下来n行,每行第一个正整数di表示到第i家商店的路费,接下来m个正整数, 依次表示c[i]j。 Output 一个正整数,即最小总费用。 Samp原创 2017-06-05 19:39:04 · 364 阅读 · 0 评论 -
【DP】【数论】17.6.3 计算器 题解
P<= 100,所以x的所有质因子都小于P,所以可以先预处理出[1,1e9]的质因数(不到3e6个),在从小到大枚举,DP一遍#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <string>using原创 2017-06-05 20:37:19 · 350 阅读 · 0 评论 -
【DP】【单调队列】17.6.3 上网 题解
Normal: f[i]=max{f[i-1],f[x-1]+c[x,i]} f[0]=0 c[x,i]表示x玩到i的快乐值 Rare: 加单调队列优化#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;#define N 500100#define M 300000struct node{in原创 2017-06-05 20:43:21 · 344 阅读 · 0 评论 -
【DP】【bitset】17.6.4 均分 题解
暴力就是做背包,然后找最接近一半的可以凑出来的值 由n<=10^6且sigma a[i]<=10^6我们可以知道不相等的a[i]最多有根号10^6种 那么就从一个10^6个物品的背包变成了10^3个物品的每个物品可以有多个的背包 用二进制拆包优化,复杂度为10^3*10^6*log 用bitset优化,再除以32事实上可以参考2015年任之洲集训队论文,提出了一种n log n的近似算法,效原创 2017-06-05 20:57:01 · 399 阅读 · 0 评论 -
【DP】【单调队列】17.6.4 假期 题解
dp+单调队列优化。 f[i]表示的状态为以第i天为假期的最后一天所OIER们的最大享受指数。 先用sum数组求出前缀和,f[i]=sum[i]-min{sum[k]}(i-q<=k<=i-p) 单调队列维护单调递增区间,每次队首取出最小值。#include <cstdio>#include <cstring>#include <iostream>using namespace std;原创 2017-06-05 21:00:16 · 335 阅读 · 0 评论 -
【BZOJ1087】【装压DP】互不侵犯King 题解
互不侵犯King在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子。Input 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N)Output 方案数。Sample Input 3 2 Sample Output 16 装压DP 第一维存/*原创 2017-07-04 21:30:11 · 421 阅读 · 0 评论 -
【BZOJ4517】【递推】【错排】排列计数 题解
4517: [Sdoi2016]排列计数Description求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的。序列恰好有 m 个数是稳定的 满足条件的序列可能很多,序列数对 10^9+7 取模。 Input第一行一个数 T,表示有 T 组数据。 接下来 T 行,每行两个整数 n、m。原创 2017-07-30 15:59:05 · 542 阅读 · 1 评论 -
【BZOJ4565】【状压DP】【区间DP】[Haoi2016]字符合并 题解
Description有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字 符和分数由这 k 个字符确定。你需要求出你能获得的最大分数。 Input第一行两个整数n,k。接下来一行长度为n的01串,表示初始串。接下来2k行,每行一个字符ci和一个整数wi,ci 表示长度为k的01串连成二进制后按从小到大顺序得到的第i种合并方案得到的新字原创 2017-11-01 21:31:21 · 531 阅读 · 0 评论