![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
inklutcuah
这个作者很懒,什么都没留下…
展开
-
【jzoj5344】【NOIP2017模拟9.3A组】【摘果子】【树型依赖背包】
descriptionsolution直接树型依赖背包没什么好说的。code#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LF double#define LL long long#define ULL unsigned int#define fo(i,j,k) for(int i=原创 2017-09-03 11:34:36 · 509 阅读 · 0 评论 -
【jzoj100000】【ZJOI2017】【仙人掌】【树型动态规划】
题目大意解题思路一个比较不显然的结论,连边不可以跨过一个强连通分量,所以我们可以按强连通分量把原图变成森林,注意强连通分量的点还是可达的,只不过不能转移到同一个强连通分量的点。考虑树的情况,我们要用一些树链覆盖原树,但是可以不覆盖。由于没有重边,所以不连边也可以视为连了重边,这样就变成了每一条边都要被覆盖。设f[i]表示考虑到i及其子树,没有连向外部的边的方案数,g[i]表示考虑到i及其子树,有一条原创 2017-05-18 12:17:35 · 446 阅读 · 0 评论 -
【jzoj5068】【GDSOI2017第二轮模拟】【树】【动态规划】
题目大意有n个点,它们从1到n进行标号,第i个点的限制为度数不能超过A[i].现在对于每个s (1 <= s <= n),问从这n个点中选出一些点组成大小为s的有标号无根树的方案数。解题思路首先我们要知道一棵带标号无根树的prufer序与树的形态一一对应。prufer序就是每次删掉度数最小的点并且把连出的边对应的点加入prufer序,剩下两个点时直接退出。还原时只需要找出最小没出现过的点,按顺序与p原创 2017-05-16 16:00:48 · 494 阅读 · 0 评论 -
【jzoj1010】【CQOI2009】【叶子的颜色】【树型动态规划】
题目大意 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根、内部结点和叶子均可)着以黑色或白色。你的着色方案应该保证根结点到每个叶子的简单路径上都至少包含一个有色结点(哪怕是这个叶子本身)。对于每个叶结点u,定义c[u]为从u到根结点的简单路径上第一个有色结点的颜色。给出每个c[u]的值,设计着色方案,使得着色结点的个数尽量少。解题思路设f[i][0,1]表示以1为根原创 2017-05-15 21:49:06 · 871 阅读 · 0 评论 -
【jzoj5081】【GDSOI2017第三轮模拟】【Travel Plan】【动态规划】
题目大意解题思路考虑到不能选的点在dfs序上是连续的,可以按价值dp从前和从后做两次,查询时合并即可。对于卡空间,对询问离线,前缀可以省掉一维。对于卡时间,可以按照当前最大价值作为边界。code#include<set>#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#define LD double#原创 2017-04-21 17:17:21 · 387 阅读 · 0 评论 -
【jzoj5102】【GDOI2017 day2】【小学生语文题】【动态规划】
题目大意给出两个串,每次操作可以将当前串的一个字符移到它前面的任意位置,求到目标串的最小操作数及其步骤。解题思路对两个串做变种的lcs,f[i][j]表示原串匹配到i,当前串匹配到j的lcs,转移保证i不小于j且前i个字符包含前j个字符。用另外的数组保留转移方式,构造解的时候贪心构造即可。code#include<cstdio>#include<cmath>#include<cstring>#原创 2017-05-11 15:29:35 · 525 阅读 · 0 评论 -
【jzoj5065】【GDOI2017第二轮模拟day2】【开房间】【动态规划】
题目大意A君与B君正在玩一款闯关游戏,游戏共有n关,每一关的目标只有一个:开房间。每一关都会有m个房间(从1~m进行编号),A君与B君每关各打开一个房间即可过关,但两人不能打开同一个房间。通过每一关后,m个房间会重新关上,在第i关打开第j个房间需要消耗t[i][j]的体力值。并且无论A君还是B君,除了第一关外,若上一关自己开了a号房间,这一关开了b号房间,则需要额外消耗K*|a-b|点体力值。现在请原创 2017-04-16 18:46:43 · 636 阅读 · 0 评论 -
【jzoj5042】【最小直径】【树形动态规划】【贪心/结论】
题目大意你有一个n个点m条边的森林,编号从0开始,边有边权,你现在要添加若干边权为L的边,满足:1、最后n个点构成一颗树。2、这棵树的直径尽量小。请你求出这个最小的直径是多少。解题思路求出每一个连通块的半径,答案及第一大加第二大+L和第二大加第三大+2L取最大。code#include<set>#include<cmath>#include<cstdio>#include<cstring>#原创 2017-04-06 08:24:36 · 707 阅读 · 0 评论 -
【jzoj5071】【GDSOI2017第二轮模拟】【奶酪】【树形动态规划】
题目大意CJY很喜欢吃奶酪,于是YJC弄到了一些奶酪,现在YJC决定和CJY分享奶酪。YJC弄到了n-1块奶酪,于是他把奶酪挂在了一棵n个结点的树上,每根树枝上挂一块奶酪,每块奶酪都有重量。YJC和CJY决定这样分奶酪:首先砍掉一根树枝,把树分成两部分,每人取一部分,然后各自在自己取的那部分树上选择一条路径并取走路径上的奶酪,然后把剩下的奶酪拿去喂老鼠。两人都想让自己取走总重量尽量大的奶酪,但他们不原创 2017-04-17 22:18:52 · 702 阅读 · 0 评论 -
【jzoj5050】【颜色树】【容斥原理】【树形动态规划】
题目大意传说中,这棵不见边际的树有N个节点,每个节点都有1片叶子,每片叶子都拥有K种颜色中的一种,独孤玉溪喜欢爬到这棵树上,沿着一条路线摘叶子,并拥有所有颜色的叶子。独孤玉溪会选择一个起点,并沿着树边走,然后最终停在一个终点上(起点和终点可能相同),当然了每一个结点只能经过一次(每一片叶子只能摘一遍)。独孤玉溪突生奇想,有多少种不同的方案能满足自己呢?(两种方案不同当且仅当起点不同或终点不同)。解题原创 2017-04-11 20:47:11 · 480 阅读 · 0 评论 -
【jzoj4920】【降雷皇】【动态规划】【二分答案】【数据结构】
题目大意求一个序列的最长上升子序列及方案数。解题思路首先维护一个数组,t[i]表示长度为i的最长上升子序列末尾最小是多少,这样就可以求出第一个答案。每个长度再用权值线段树维护每个末尾的方案数,转移方案数时求一下比它小的末尾方案数之和。code#include<cmath>#include<cstdio>#include<algorithm>#define LL long long#defin原创 2016-12-10 15:15:35 · 422 阅读 · 0 评论 -
【jzoj3737】【挖宝藏】【斯坦纳树】【状态压缩动态规划】
题目大意解题思路每层单独考虑,就是平面图的最小生成树,斯坦纳树。设F[i][j][s]表示当前在(i,j)目标点的选取情况为s的最小花费,观察可知当前状态可以由邻近节点走一步得来,也可以由当前节点s的两个子状态得来,注意减去重复的当前点的花费。我们可以枚举s,先更新所有点s的答案,再通过spfa更新其他点的答案。对于多层,考虑先把下一层解决,把下一层当作一个目标点加在当前层上,每个点都要这样做,这样原创 2017-03-18 15:59:23 · 538 阅读 · 0 评论 -
【jzoj3630】【汕头市选2014】【分叉】【树形动态规划】
题目大意给出一棵N 个点的树,点的编号是1, 2,。。。,N。对于3 个点{a,b,c},如果不存在一条简单路径同时经过a,b,c,那么{a,b,c}是一个分叉。统计不同分叉的数量。树 无环,连通的无向图简单路径 不重复经过同一个点的路径解题思路考虑正难则反,求出所有匹配情况减去三点共链的情况。当前做到x,如果点集包含x,另外两个点可以在不同的两棵子树,记录(sum size)^2,和sum(siz原创 2017-02-25 12:18:04 · 380 阅读 · 0 评论 -
【jzoj3632】【汕头市选2014】【舞伴】【状态压缩动态规划】
题目大意N 个男孩,N 个女孩,男孩和女孩可能是朋友,也可能不是朋友。现在要组成N 对舞伴,要求每对舞伴都是一男一女,且他们是朋友。统计不同配对方案的数量,因为结果很大,所以只要求除以M 的余数。解题思路考虑动态规划,设f[s]表示女孩配对的情况,显然|S|个男孩已经配对了,配对的先后没有影响,每个人都一定会配对,如果我们按顺序配对男孩,就可以o(n)转移。code#include<cmath>#原创 2017-02-25 12:08:42 · 366 阅读 · 0 评论 -
【jzoj3919】【COCI2014/2015 Round1 KAMP】【志愿者】【树形动态规划】
题目大意FJ王国有N个村庄组成,村庄之间构成树型结构,村庄之间的公路是双向的。由于发洪水,现在FJ召集了K名奶牛志愿者,每名志愿者被派遣到一个村庄支援救助,不同的志愿者被派遣到不同的村庄。FJ要选择一个村庄作为救灾大本营,一开始所有的志愿者都在该村庄,FJ自己作为司机,要用汽车把这K名志愿者送到各自目的地。FJ出发前会把所有奶牛志愿者都装到他的汽车上,然后按照FJ自己设计的路线,最终把所有奶牛送到目原创 2017-01-23 17:17:21 · 792 阅读 · 0 评论 -
【jzoj5220】【GDOI2018模拟7.10】【C】【动态规划】
题目大意解题思路dp求lcs很容易,关键是x串的子串只要y有一个对应就贡献1且只贡献1。考虑设g[i][j],x串dp到i,y到j的方案数,加入x串字符时可以直接累加方案数,但需要lcs相同,加入y串字符时不可以累加,同时加入x串字符和y串字符时需要找到y串前j个字符中最后的字符,将这个状态的前一个状态转移到当前状态,即lcs小1的状态。code#include<cstdio>#include<c原创 2017-07-10 19:52:01 · 401 阅读 · 0 评论 -
【jzoj3661】【SHTSC2014】【概率充电器】【期望】
题目大意著名的电子产品品牌SHOI刚刚发布了引领世界潮流的下一代电子产品——概率充电器:“采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI概率充电器,您生活不可或缺的必需品!能充上电吗?现在就试试看吧!”SHOI概率充电器由n-1条导线连通了n个充电元件。进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定。随后电能可以从直接充电的元件原创 2017-06-24 10:24:36 · 323 阅读 · 0 评论 -
【codeforces 808E】【Selling Souvenirs】【贪心】【动态规划】
题目大意很多个物体01背包,size小于等于3,求给定容量最大价值。解题思路考虑只有1和2的情况,先排一波序,设f[i]表示用了i容量的最大价值,顺便存一下当前用了多少个2,可以发现贪心地取是正确的,方案唯一,因为我们已经排过序了。考虑3的情况,排序后一样枚举选多少个3,剩下的用1和2凑即可。code#include<cstdio>#include<cmath>#include<cstring>原创 2017-06-15 15:25:53 · 410 阅读 · 0 评论 -
【jzoj3418】【NOIP动态规划专题】【选课】【树型依赖动态规划】
description大学里实行学分。每门课程都有一定的学分,学生只要选修了这门课,并通过考核就能获得相应的学分。学生最后的学分是他各门课学分的总和。每个学生都要选择规定数量的课程。其中有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其他的一些课程的基础上才能选修。例如,《剥皮术》就必须在选修了《屠龙术》后才能选修。我们称《屠龙术》是《剥皮术》的先修课。每门课的直接先修课最多之有一门。两原创 2017-09-01 22:02:23 · 850 阅读 · 0 评论 -
【jzoj5350】【NOIP2017提高A组模拟9.7】【陶陶摘苹果】【动态规划】
descriptionsolution题目的意思是板凳不可重叠,数据不能直接摘苹果。对苹果排序,对凳子按r从小到大排序。设f[i][j]表示前i个凳子,选了j个,最后一个选了i的最大贡献,枚举由那个f[k][j-1]转移过来,能贡献多少就在苹果序上二分再max一下i左端点k右端点+1即可。code#include<cstdio>#include<cmath>#include<cstring>#原创 2017-09-08 22:17:28 · 765 阅读 · 0 评论 -
【jzoj5347】【NOIP2017提高A组模拟9.5】【遥远的金字塔】【斜率优化动态规划】
descriptionsolution考虑动态规划,设f[i][j]表示前i个,用了j个矩阵的最大答案。f[i][j]=maxk<=if[k][j−1]+a[i]∗(i−k)f[i][j]=\max_{k<=i}f[k][j-1]+a[i]*(i-k),其中a[i]表示第i段的长度。可以发现对于i的两个决策点x,y(x<y)x,y(x<y),当(f[y]−f[x])/(y−x)<a[i](f[y]-原创 2017-09-08 22:12:22 · 467 阅读 · 0 评论 -
【jzoj5335】【NOIP2017提高A组模拟8.24】【早苗】【矩阵乘法快速幂】
descriptionsolution设f[i][j]表示到第i天,往前j天不同的方案数,可以转移到f[i+1][k],当k<=j时系数是1,当k==j+1时系数是m-j,当然要保证j!=m,可以发现这时可以用矩阵乘法快速幂解决的。code#include<set>#include<cstdio>#include<cmath>#include<cstring>#include<algorit原创 2017-08-24 11:39:23 · 424 阅读 · 0 评论 -
【jzoj5332】【NOIP2017提高A组模拟8.23】【密码】【ac自动机】【动态规划】
descriptionsolution先把秘钥建ac自动机,设f[i][j][k][l]表示现在填到第i位,对应ac自动机上j结点,包含k个秘钥,有没有顶上界,枚举下一个填什么转移即可。code#include<set>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LL long lon原创 2017-08-23 14:09:51 · 325 阅读 · 0 评论 -
【jzoj5237】【GDOI2018模拟8.7】【最长公共子序列 】【动态规划】
题目大意解题思路设f[i][j]表示a考虑前i个字符,b考虑前j个字符的lcs,g[i][j]表示长度为f[i][j]的匹配的个数。g[i][j]可以由g[i-1][j],g[i][j-1],g[i-1][j-1]中f相同的转移过来,但是如果f[i][j]==f[i-1][j]==f[i][j-1]==f[i-1][j-1],g[i][j]=g[i-1][j]+g[i][j-1]-g[i-1][j-原创 2017-08-07 15:23:51 · 384 阅读 · 0 评论 -
【jzoj5322】【GDOI2017模拟8.21】【小朋友】【状态压缩动态规划】
descriptionsolution可以发现三人桌不会超过3个,设f[i][j][s]表示到第i个人,用了j个3人桌,往前k+1个人选取状态为s。每个状态最前的位为1就一定要安排一桌,暴力枚举即可,到了最后i要枚举到n+k+1,n以后的不算贡献,但是要保证n-k到n的人都被选完。code#include<cstdio>#include<cmath>#include<cstring>#incl原创 2017-08-21 14:21:21 · 267 阅读 · 0 评论 -
【jzoj3773】【NOI2015模拟8.15】【小 P 的烦恼】【动态规划】
题目大意小 P 最近遇上了大麻烦,他的高等代数挂科了。于是他只好找高代老师求情。善良的高代老师答应不挂他,但是要求小 P 帮助他一起解决一个难题。问题是这样的,高代老师近期要组织班上同学一起去漂流,漂流可以看做是在一张 n 个点 m 条边的有向无环图上进行的,点编号从 0 到 n-1 ,表示景点; 边是连接各景点的一定长度的河道。同时,定义编号为 s 是起点而 t 是终点。我们不妨把从 s 点到 t原创 2017-08-06 16:48:05 · 492 阅读 · 0 评论 -
【jzoj5251】【GDOI2018模拟8.11】【决战】【状态压缩动态规划】
题目大意解题思路设f[i][j][s]表示第i行放了j个哲学家01状态是s,预处理转移方法,计算j的上下界优化常数即可以通过。实在不行就手动开o2。code#pragma GCC optimize(2)#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LF double#define LL原创 2017-08-13 09:03:28 · 342 阅读 · 0 评论 -
【jzoj1617】【SCOI2005】【互不侵犯】【状态压缩动态规划】
题目大意在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。解题思路设f[i][j][k][s]表示到i,j这个格子,之前放了了k个国王,最后n+1个格子的状态为s,方案数是多少,转移就很简单了,只需滚动一下数组卡空间即可。code#include<cstdio>#include<cmath>#in原创 2017-08-11 15:48:09 · 247 阅读 · 0 评论 -
【jzoj5248】【NOIP2017提高A组模拟8.10】【花花的聚会】【动态规划】【可持久化线段树】
题目大意解题思路设f[i]表示i到根最小花费,用可持久化线段树维护到根的路径上的f,区间求最小值即可。code#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LF double#define LL long long#define ULL unsigned int#define fo(原创 2017-08-10 16:15:52 · 293 阅读 · 0 评论 -
【jzoj5219】【GDOI2018模拟7.10】【B】【动态规划】
题目大意解题思路动态规划,设f[i][j]表示填到第i位,之前有j个比当前位大,自行脑补转移方程即可,最好滚动数组。code#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LF double#define LL long long#define ULL unsigned int#def原创 2017-07-10 11:52:14 · 289 阅读 · 0 评论 -
【jzoj5215】【BZOJ4870】【Shoi2017】【GDOI2018模拟7.9】【组合数问题】【矩阵快速幂】
题目大意解题思路暴力60分没毛病。rcode#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LF double#define LL long long#define ULL unsigned LL#define fo(i,j,k) for(LL i=j;i<=k;i++)#defin原创 2017-07-09 16:26:24 · 341 阅读 · 0 评论 -
【jzoj3920】【噪音】【动态规划】
题目大意FJ有M个牛棚,编号1至M,刚开始所有牛棚都是空的。FJ有N头牛,编号1至N,这N头牛按照编号从小到大依次排队走进牛棚,每一天只有一头奶牛走进牛棚。第i头奶牛选择走进第p[i]个牛棚。由于奶牛是群体动物,所以每当一头奶牛x进入牛棚y之后,牛棚y里的所有奶牛们都会喊一声“欢迎欢迎,热烈欢迎”,由于声音很大,所以产生噪音,产生噪音的大小等于该牛棚里所有奶牛(包括刚进去的奶牛x在内)的数量。FJ很原创 2017-01-22 12:21:29 · 339 阅读 · 0 评论 -
【jzoj3891】【钻石交易】【动态规划】【最短路】
题目大意解题思路枚举钻石买卖情况,通过spfa更新当前情况停留在所有点的答案,再考虑再停留点卖钻石的情况。code#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#define LF double#define LL long long#define min(a,b) ((a<b)?a:b)#defi原创 2017-01-20 16:38:33 · 319 阅读 · 0 评论 -
【jzoj3861】【JSOI2014】【支线剧情2 】【树形动态规划】
题目大意给出一棵有根树,走过每一条边有一定的费用,只能从根方向往叶子方向走。你只有一个存档位,你可以选择途中的一个地方存档,任何时候你可以读档,回到存档位,也可以回到根。求最少的费用走过所有点。解题思路设f[i]表示i及其子树无存档从i走完子树的花费。g[i]表示i有存档走完子树的花费。f可以很暴力地求,所有都从根开始走。g我们先找一个子节点走f比走g最劣,先将它走g。在扫其他节点走f和g那个优就走原创 2017-01-17 14:57:34 · 410 阅读 · 0 评论 -
【jzoj4901】【矩阵】【动态规划】
题目大意给出矩阵中每行每列的和,还有矩阵的每项都是非负整数。求满足这样条件的矩阵总共有多少种。解题思路由于一行最多只有3个数,只有125行,设f[i][j][k]为到第i行,第一列填了j,第二列填了k的方案数,直接dp剪一下枝就可以了。code#include<cstdio>#include<algorithm>#define LL long long#define min(x,y) ((x<原创 2016-12-03 19:29:10 · 320 阅读 · 0 评论 -
【bzoj1010】【HNOI2008】【玩具装箱】【toy】【动态规划】【斜率优化】
题目大意: 有编号为1..N的N件玩具,第i件玩具长度是Ci。可以将任意编号连续的玩具变成一堆,再装到容器中。如果一堆中有多个玩具,那么每两件玩具之间要加入1个单位长度的填充物。 如果将第i到第j件玩具放在一堆中,那长度将为:j-i+sigma(Ck)//i原创 2015-08-13 16:45:29 · 443 阅读 · 0 评论 -
【jzoj4892】【最优得分】
题目大意给出很多道题,每题的得分随时间线性减少,求给定时间内最高得分解题思路考虑相邻两题的先后顺序,得到偏序关系,再经转化得到任意两题的绝对偏序关系,排序后就是背包问题。code#include<cstdio>#include<algorithm>#define LL long long#define min(x,y) ((x<y)?x:y)#define max(x,y) ((x>y)?x原创 2016-11-14 21:38:34 · 359 阅读 · 0 评论 -
【jzoj4863】【Market】
题目大意解题思路将商店和询问按时间排序,一边dp一边回答询问。code#include<set>#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define LL long long#define LD double#define max(a,b) ((a>b)原创 2016-11-07 21:46:49 · 312 阅读 · 0 评论 -
【jzoj4783】【Osu】
题目大意给出一些按顺序出现的点(x,y)和出现时间,问经过k个点所需要的最小速度,初始在(0,0)速度要保留根号。解题思路答案可能值有n^2个(两两点对),二分答案后n^2dp判断即可。code#include<set>#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#define LF double#原创 2016-09-23 20:56:51 · 434 阅读 · 0 评论 -
【jzoj4707】【艾比所特】
题目大意排成一条直线的n个点,要从一个点走完所有点再回到原点,其中第i个点位于数轴上的位置x[i]。如果从i跳到j,首先要花费时间|x[j]-x[i]|。假如i解题思路设f[i][j][k]为到第i个点,有j条边连出去,k条边连进来的最小花费。1)f[i][j][k]=f[i-1][j+1][k+1]+a[i]+c[i]+x[i]*2;2)f[i][j][k]=f[i-1][j][k]+a[i]+d原创 2016-09-06 16:09:33 · 687 阅读 · 0 评论