07 2019 档案
摘要:题目链接 题目含义 给出一堆区间,要求一个集合V与这些区间都共同含有两个以上不同的整数 题目分析 用sum[x]来表示[0,x]内包含V集合整数的个数 那么区间[a,b]则说明sum[b]-sum[a-1]>=2 在求最长路 if (dis[v]<dis[u]+w) dis[v]=dis[u]+w;
阅读全文
摘要:题目链接 题目含义 在一个图上,要从点s到点t,最多可以省去k条路的花费,问最少花费 题目分析 如果不看省去k条路花费的话,就是一个求最短路 考虑k条路花费的话,就是一个分层图 建立二维数组dis[maxn][k+1],具体的细节其实和求最短差不多 当然省去花费的路越多,花费越少,最后输出dis[t
阅读全文
摘要:题目链接 题目含义 一个人想去朋友家,最短路不走,想走次短路,而且长度严格小于最短路 题目分析 次短路的模板题,还是挺简单的 但是与求最短路不同 Dijstra算法里此时队列中dis最小的点的dis即是它的最短路,就将它出队处理接下来的点就行了 而求次短路时,如果这个点像求最短路一样出队的话,万一这
阅读全文
摘要:题目链接 今天集训学长没有给负环的题,所以一下子全都用Dijkstra做了,SPFA都没练习到,所以专门把这道不卡SPFA的题拿来练练 题目含义 求1到其他点的最短距离之和,加上其他点到1的最短距离之和 题目分析 求1到其他点的最短距离之和,也就是单源最短路径,Dijkstra和SPFA应该都行 而
阅读全文
摘要:题目链接 题目含义 建树,如果树里有环就输出YES,如果没有就输出最大直径 题目分析 可以用并查集来判断有没有环,如果当前是树,那么每个节点都在一个集合内 此时树内任意两个节点加上一条边都会成环 接下来的工作就是求最大直径了 这里我是用的DP法求直径,不知道两次DFS行不行 但要注意的是,全部的节点
阅读全文
摘要:题目链接 题目含义 找出每台电脑距离最远电脑的长度 题目分析 对于节点v来说,如果最长长度在它的子树里,我们取dp[u][0] 否则,最长长度要经过它的父节点u,v的最长长度=dis(u,v)+u的最长长度 第一种情况,如果u的最长长度经过v这个子节点,那么很明显最长长度不可取,那我们就要去第二长长
阅读全文
摘要:题目链接 题目含义 求树上两个点到第三个点重合路径的最大长度 题目分析 设三个点为A,B,C dis(A,B)=deep[a]+deep[b]-2*deep[lca(A,B)] 所以这是个求最近公共祖宗的题 那么答案可以由两种方法求 (1)若以C为第三个点,求( dis(a,c)+dis(b,c)-
阅读全文
摘要:题目链接 题目含义 建树,求两个数的最近公共祖宗 题目分析 LCA入门模板题,还有一个树上倍增法不会 所以就只用Tarjan算法了 题目代码
阅读全文
摘要:题目链接 题目含义 就是建一个树,让你求最大直径 下面用分别用DP和DFS的方法 题目代码 #include<iostream> #include<stdio.h> #include<string.h> using namespace std; const int maxn=5e4+7; int n
阅读全文
摘要:题目链接 题目含义 第一行给出城堡个数N和背包容量M 第i+1行给出i的父亲以及i的权值 求装m个城堡能得到的最大权值 题目分析 入门的树形背包 题目代码
阅读全文
摘要:推荐一个博主写的——关于树形DP中求最小支配集,覆盖集,独立集的博客 他写的关于树形DP代码的解释很好懂 虽然还有求重心,树形背包什么的没讲,不过对于我这样刚入门的人来说应该是够了 最小支配集——POJ3659 题目含义 有1到N个点,给出点两两的相邻关系,这个图的最小支配集 题目分析 简单易懂的最
阅读全文
摘要:题目含义 从坐标0开始,每次可以从i到i+l与i+r之间的位置 每次到新的位置,都可以获得新的位置对应的数 问还差一步就能到大于n的位置时,获得的最大数字 题目分析 dp[i]=max(dp[i-r]...dp[i-l])+a[i] 每次找最大就开一个数组用单调队列就好了(或者用一个优先队列) 题目
阅读全文
摘要:题目含义 给出一堆数字,要求分成几个区间,并且每个区间的和不大于m,并求每个区间的最大值之和最小 题目分析 动态转移方程是dp[i]=dp[j]+max(a[j+1],a[j+2],...,a[i]) 可以理解为,一个长的数列的值等于一个短的数列的值加上剩下的数的最大值 但是,sum[i]-sum[
阅读全文
摘要:题目含义 给出n*n的地图和每次行走最长距离k,每次到达的数字必须大于原来的数字 问走一遍得到的数字最大是多少 题目分析 一个dfs就可以了 题目代码
阅读全文
摘要:题目含义 v个村庄要建p个邮局 现给出每个村庄的位置,并且邮局只能建在村庄的位置 问每个村庄到离它最近的邮局距离之和最小为多少 题目分析 区间dp[i][j]表示在前i个村庄建j个邮局的最小距离 dp[i][j]=min(dp[i][j],dp[k][j-1]+dis[k+1][j]) 这个状态方程
阅读全文
摘要:题目含义 不是完美匹配,找出匹配的括号数目 题目分析 括号匹配有两种,一种是括号里有括号(()),一种是括号在外面()() 所以如果s[i]与s[j]匹配,那么dp[i][j]=dp[i+1][j-1]+2 同时要不断在i与j之间找间隔点,找出最大的dp[i][k]+dp[k+1][j] 对我来说,
阅读全文
摘要:题目含义 给出一堆课的截止时间和完成需要的时间 每完成这门课的时间超过截止时间一天就扣一分 问怎么安排完成所有课扣掉的分最少 题目分析 可以看到课总共就不超过16个 假设有3门课,用111表示全部完成,000表示都没完成,于是这个题可以用状压dp完成 用dp[1]...dp[1<<n-1]表示n门课
阅读全文
摘要:题目含义 给出一堆坏的电脑的坐标和一系列操作 好的电脑如果距离小于等于d可以看做一个集合 然后O是修电脑,S是询问两个电脑在不在一个集合 题目分析 明显的并查集问题,只是要标识好的和坏的电脑,然后只能在好的电脑用并查集 注意:如果让【新修好的电脑】的父亲指向【之前修好的电脑】的话 可能会出错,本该在
阅读全文
摘要:题目含义 有一堆商品,给出了售货截止日期和售价 让你选择每天售出的商品,使得收入最大 题目分析 为什么可以选择并查集呢,我一开始也不明白 但是尽量选择售价高的商品,这个贪心思维是没问题的 主要在于选择一个商品后,可能一些快到期的商品就不能选了 在这里,我们根据截止日期分堆,一个截止日期一个集合 我们
阅读全文
摘要:题目含义 找出与之前的话不符的假话的数目 题目分析 简单的扩展并查集 题目代码
阅读全文
摘要:题目含义 就是初始化一堆数为1 可以经过操作把一个区间的数都改变 并求这堆数的总大小 题目分析 有一个 区间更新,可以用树状数组也可以用线段树 题目代码
阅读全文
摘要:题目含义 给出一堆星星的横纵坐标 指定一个星星的大小是横坐标小于等于它且纵坐标小于它的星星个数 要求你求出各个大小的星星的个数 题目分析 这道题可以用树状数组做,但需要一点巧妙的转化 如果把星星按纵坐标从小到大进行处理,这个星星的大小就是横坐标小于等于它的星星的个数 这样就只用考虑横坐标,并通过树状
阅读全文
摘要:题目含义 题目都给出来了,要你写个线段树 题目分析 只要学会了模板,这种题就很简单了 题目代码 注:不管怎样,首先要试着默写出来通过一次
阅读全文
摘要:这一天学的关于如何求找素数——埃氏筛,以及关于欧拉函数的运用 https://vjudge.net/contest/283625#problem/A 这道题就是欧拉函数的模板题,记住模板就行 需要注意的是要把x加减a,尽量让x非负最小 https://vjudge.net/contest/28362
阅读全文
摘要:题目含义 嗯。。。每种怪都有一个对应的经验值和忍耐度 问你能不能在有限的忍耐度和杀怪数之内得到升级所需的经验 如果能,输入升完级能保留的最大忍耐度 题目分析 如果没有杀怪数限制,就是一个将忍耐度看做背包容量,寻找忍耐度m能得到的最大经验值的完全背包 如果是给每个怪物限制一个杀怪数,那就是一个多重背包
阅读全文
摘要:题目含义 给出存钱罐空时和满时的重量,以及一些钱币的价值和重量 每种钱可以取无数次,问装满存钱罐的最小价值 题目分析 很明显,一个完全背包,并且要求刚好装满,又是求最小值,就可以将dp[i]除dp[0]以外赋为INF 题目代码
阅读全文
摘要:题目含义 找两个序列共有的,单调递增的,最大的子序列 题目分析 两个长序列的情况,可以由两个短的序列发展而来,也就是可以用动态分析 令dp[i][j]表示第一条序列到ai,第二条序列到bj,同时bj是公共子序列的最后一项时的公共子序列长度 如果a[i]!=b[j],那么dp[i][j]=dp[i-1
阅读全文
摘要:题目含义看了就能理解,一个人捡馅饼 题目分析 这和数塔的题做法一样 一个时间就是一层塔,11个位置就是一层塔有11个数 可以从塔底到塔顶dp,dp公式是dp[i][j]+=max(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]) 题目代码
阅读全文
摘要:题目含义 每一行给出两个点,代表一个矩形的左下角端点和右上角端点 要你求出这些矩形覆盖坐标轴的整个面积 题目分析 用平行x轴的扫描线扫描整个图形,得到很多长宽不同的矩形,求出面积再相加 将每个矩形的面积记作 len(x)*len(y) 每个len(x)我们通过加减每个点的x左右坐标,通过线段树求su
阅读全文
摘要:题目含义 给出一堆数和一个数T 找出满足区间和严格小于T的区间个数 题目分析 又是求区间和,那么就考虑前缀和[a,b]=sum[b]-sum[a-1]<T 如果求出前缀和用两个循环一个个试,那肯定会超时 而式子可以化作 sum[j]-T<sum[i],j>i,这就很像一个求逆序对的问题了 题目代码
阅读全文
摘要:题目含义 给出一堆数,和一系列操作 Q是求区间的值,C是区间每个数都增加一个数 题目分析 可以用线段树做,但这里就用树状数组做了 题目代码 一次过了,开心
阅读全文
摘要:题目含义 给出一堆数,要你在里面找几个相邻的数 它们的和乘以它们的最小值是这所有数里最大的 输出它们得到的值以及第一个数的坐标和最后一个数的坐标 题目分析 这个式子是:这些数的和 乘以 这些数的最小值 那么如果最小值不变,数的个数是越多越好(因为数都大于零) 那么我们可以考虑根据最小值划分区间,并按
阅读全文
摘要:题目含义 给出一个区间的长度,要你在一堆数中移动这个区间(保持区间长度不变),找出对应的最大最小值 题目解析 这个区间在向右移动,那么时时刻刻有数离开这个区间,有数加入这个区间,这样的话可以考虑单调队列 把这些数按从大到小的顺序放入一个数组,并且从大到小判断这个数是否满足在这个区间,不满足就取出 这
阅读全文

浙公网安备 33010602011771号