09 2015 档案
摘要:题意: 某校举行一场非诚勿扰,给定一个出场序列,表示n个人的屌丝值,如果他是第k个出场的,他的不满意度为(k-1)*diao[i]。为了让所有人的屌丝值之和更小,导演设置一个栈,可以将部分人装进栈中,来改变序列。也就是说,要么按照给定序列上场,要么将某个人前面部分人装进栈,让该人先出场,再让栈中的...
阅读全文
摘要:题意: 在x轴上有一家外卖餐馆,有n个顾客站在x轴上不同坐标上且叫了外卖,每个人的脾气不同,每1分钟没有收到外卖就会增加Fi点愤怒值,而外卖小哥的车是有速度的v-1/分钟,问怎样的送餐次序会让所有顾客的愤怒值之和最小?输出愤怒值之和!思路: 此题是很经典了,比较现实的模型。 随便画画就知道小哥...
阅读全文
摘要:题意: 给出一个序列,共n个正整数,要求将区间[2,n-1]全部删去,只剩下a[1]和a[n],也就是一共需要删除n-2个数字,但是每次只能删除一个数字,且会获得该数字与其旁边两个数字的积的分数,问最少可以获得多少分数?思路: 类似于矩阵连乘的问题,用区间DP来做。 假设已知区间[i,k-1]...
阅读全文
摘要:题意: 给出一个1*N的矩阵(就是一行的格子),其中部分格子可以有草,部分无草,现在要求放置一些稻草人在某些格子上,每个稻草人可以覆盖3个连续格子,为使得有草的格子都能被覆盖,问最少放置几个稻草人。思路: 常规的DP。从左到右,考虑每个格子,无论是否有草,都可以放稻草人,也可以不放稻草人。然后进...
阅读全文
摘要:题意: 过河模型:有n个人要渡河,每个人渡河所耗时可能不同,只有1只船且只能2人/船,船速取决于速度慢的人。问最少耗时多少才能都渡完河?思路: n2的情况,第一次肯定是两个耗时少的先过去。接下来有两种渡河方式,有可能是{a回,另外2人去,b回,a和b去},也可能是{a回,a和另一人去}。也就是说...
阅读全文
摘要:题意: 给出一个n个元素的序列,要求从中删除任一段长度为L的连续子序列,问删除后的LIS是多少?(ni]就是一段已经处理完成的序列,假设a[i+1]->a[i+L]这一段是将要删去的,那么将分成两段:a[0]->a[i]和a[i+L+1]->a[n]。 假设后一段以a[i+L+1]开头,而前段以...
阅读全文
摘要:懒得整理了,请勿往下看。 (一)欧拉函数 设n为正整数,以φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值,这里函数φ:N→N,n→φ(n)称为欧拉函数。有如下一些性质: (1)欧拉函数是积性函数——若m,n互质,φ(mn)=φ(m)φ(n)。 (2)特殊性质:当n为奇数时,φ(2n
阅读全文
摘要:题意: 给出数字A和B,要求AB的所有因子(包括AB和1)之和 mod9901 的结果。思路: 即使知道公式也得推算一阵子。 很容易知道,先把分解得到,那么得到,那么的所有因子之和的表达式如下: 我们要做的就是计算出sum%9901的结果。 有两种方法: (1)直接用快速幂计算对上面...
阅读全文
摘要:题意: 给一个数字序列,要求找到LIS,输出其长度。思路: 扫一遍+二分,复杂度O(nlogn),空间复杂度O(n)。 具体方法:增加一个数组,用d[i]表示长度为 i 的递增子序列的最后一个元素,且该元素总是保持当前最小。初始化d[1]=A[i],当前LIS的长度len=1。从 2 to n...
阅读全文
摘要:题意: 给一个合法的括号序列,仅含()这两种。现在要为每对括号中的其中一个括号上色,有两种可选:蓝or红。要求不能有两个同颜色的括号相邻,问有多少种染色的方法?思路: 这题的模拟成分比较多吧?两种颜色还有无色,用2个bit就可以表示了。然后就是各种转移,注意结果可能非常大,要取模后输出。转移主要...
阅读全文
摘要:题意: 给出一个字符串,其中仅仅含 “ ( ) [ ] ” 这4钟符号,问最长的合法符号序列有多长?(必须合法的配对,不能混搭)思路: 区间DP的常规问题吧,还是枚举区间[i->j]再枚举其中第k个与第i个来配对,如果配对了就+2这样子。 1 //#include 2 #include 3 ...
阅读全文
摘要:题意: 有个人要去参加万圣节趴,但是每到一个趴都要换上特定的服装,给定一个序列表示此人要穿的衣服编号(有先后顺序的),他可以套很多件衣服在身上,但此人不喜欢再穿那些脱下的衣服(即脱下后就必须换新的),问最少需要穿多少件衣服?思路: 如果多件一样的相连的话就可以只穿1件。将问题化为小问题,再来连接...
阅读全文
摘要:题意: 给一棵n节点的树图,每个点都是一个小写字母,要求找到两个点(a,b),从a->b的路径上形成了一个字符串为s。给出s,问是否存在这样的点对。思路: 考虑一个点,要么从该点出发,要么在该点结束,要么它作为一个中间点将左右两个串连起来成为s。叶子只能是起点或者终点。在每个点中需要保存两个队列...
阅读全文
摘要:题意: 给出平面直角坐标系上的n个点的坐标,表示一个多边形蛋糕,先判断是否是凸多边形,若否,输出"I can't cut."。若是,则对这个蛋糕进行3角形剖分,切n-3次变成n-2份三角形蛋糕给小伙伴吃,但是每切一次需要一个费用,公式是:cost[i][j]= |xi+ xj| * |yi+ yj...
阅读全文
摘要:题意: 有n个城市,构成一棵树,每个城市有v个人,要求断开树上的一条边,使得两个连通分量中的人数之差最小。问差的绝对值。(注意本题的M是没有用的,因为所给的必定是一棵树,边数M必定是n-1)思路: 考虑当前节点t,当断开t与父亲的边时,“子树t中的人数”与“剩下的人数”之差的绝对值若最小,则为答...
阅读全文
摘要:题意: 给定一棵树,n个节点,若删除点v使得剩下的连通快最大都不超过n/2,则称这样的点满足要求。求所有这样的点,若没有这样的点,输出NONE。思路: 只需要拿“求树的重心”的代码改一行就OK了。因为依然是在判别最大连通块的点数。 1 //#include 2 #include 3 #inc...
阅读全文
摘要:题意:求树的重心,若有多个,全部打印出来。思路: 树的重心:在删除点v后,森林中的每棵树的节点数尽量均匀,若最大的那棵树的节点数最小,称v为树的重心。 这道题只是求树的所有重心,当且经当这棵树有对称性质时才有多重心,因此一棵树的重心最多不会超过2个。也是一遍DFS就可以搞定了,参考这个。 1 /...
阅读全文
摘要:题意: 给定一个敌人的通信系统,是一棵树形,每个节点是一个敌人士兵,根节点是commander,叶子是前线,我们的目的是使得敌人的前线无法将消息传到commander,需要切断一些边,切断每条边需要一定的power,而我们有一台具有m点power的机器,问在使用此机器切断敌人通信系统的情况下,...
阅读全文
摘要:题意: 给定一棵树,每个节点代表一个员工,节点编号小的级别就小,那么点1就是boss了。接下来给出对m个点的限制,有3种符号分别是op=“大于/小于/等于”,表示以第i个点为根的子树所有人的工资之和大于/小于/等于x,要求判断m个限制是否冲突了。注意每个员工的工资下限是1,而无上限。ps:可能出...
阅读全文
摘要:题意:给定一棵n个节点的树,起点是1,终点是n,每经过一条边需要消耗Ti天,每个点上有一定量的珠宝,要求必须在t天内到达终点才可以将珠宝带出去,问至多能带多少珠宝?思路: 注意Ti可以为0,而且有可能t太小以至于不能到达n,则输出不可达。这样想会简单点,将"1->n"路径上的每条边断开,变成一片森...
阅读全文
摘要:题意:有n个城市并排着,每个城市有些珠宝,有两个人站在第s个城市准备收集珠宝,两人可以各自行动,但两人之间的距离不能超过dis,而且每经过一个城市就需要消耗1天,他们仅有t天时间收集珠宝,问最多能收集多少珠宝?思路: 其实就是类似一个滑动窗口在收集一个序列上的权值。首先两个人可以同时往两边散开,直...
阅读全文
摘要:题意:给一棵树,一个人站在节点s,他有m天时间去获取各个节点上的权值,并且最后需要回到起点s,经过每条边需要消耗v天,问最少能收获多少权值?思路: 常规的,注意还得跑回原地s。 1 //#include 2 #include 3 #include 4 #include 5 #include...
阅读全文
摘要:题意:给定一个序列A,接下来又m个询问,每个询问输出A[L,R]中的第K大。(保证第k大存在)思路: 我想拿来练习“可持久化线段树”的,搜到这个比较巧的算法也可以解决这个问题,叫“归并树?。大概的思想就是和线段树一样,只是线段树上的每个非叶子节点是一个区间,等于该节点的两个孩子节点的区间的拼接起来...
阅读全文
摘要:题意: 给一棵n个节点的树,点1为敌方基地,叶子结点都为我方阵地。我们可以在每个结点安放炸弹,每点至多放一个,每个结点有ki种炸弹可选,且每种炸弹有一个花费和一个攻击力(1点攻击力使敌人掉1点hp)。敌人的目的是我方阵地,任意路线都有可能,但规定只能往下跑。问当有m钱时,最坏情况下最多能打掉敌人多...
阅读全文
摘要:题意:给定一棵树图,一个人从点s出发,只能走K步,每个点都有一定数量的苹果,要求收集尽量多的苹果,输出最多苹果数。思路: 既然是树,而且有限制k步,那么树形DP正好。 考虑1个点的情况:(1)可能在本子树结束第k步(2)可能经过了j步之后,又回到本节点(第k步不在本子树) 第二种比较简单,背包...
阅读全文
摘要:题意:给定一棵树图,n个节点,有边权,要派k 2 #include 3 #include 4 #include 5 #include 6 #include 7 #define pii pair 8 #define INF 0x3f3f3f3f 9 #define LL long long...
阅读全文
摘要:题意:给一个森林,n个节点,每个点有点权,问若从中刚好选择m个点(选择某点之前必须先选择了其父亲),使得这m个点权之和最大为多少?思路: 比较常规。就是DFS一次,枚举在子树中可能选择的k个点(注意上限为min(子树节点数,到此子树最多可选节点数)),需要注意的是dp[t][1]必须是点t自己,枚...
阅读全文
摘要:题意:给一棵树,在树中删除一些边,使得有一个连通块刚好为p个节点,问最少需要删除多少条边?思路: 因为任一条边都可能需要被删除,独立出来的具有p个节点的连通块可能在任意一处地方。先从根开始DFS,然后进行树DP,dp[t][i]表示在以t为根的子树中删除i个点需要删除多少条边。dp[t][n-p]...
阅读全文
摘要:题意:给定一棵树,n个节点,其中有m个叶子表示的是用户,其他点表示中转器, 每条边都有权值,每个用户i愿意给的钱w[i],问如果在不亏钱的情况下能为多少用户转播足球比赛?思路: 其实就是要选出部分叶子节点,其花费=所选叶子权值 - 经过的所有边权(每条边只算1次花费)。 那么对于每个节点,可以考...
阅读全文
摘要:题意:给一个树形图,n个节点,n-1条有向边,要求选一个节点作为根,使需要改变方向的边的数目最少。并输出所有可能作为根的点。思路: 先随便一个点进行DFS,计算将每棵子树的边全部往下时,所需要的费用down[i]。还是那个点进行DFS,这次就要求答案了,尝试将每个点t作为根,那么以t作为根的总费用...
阅读全文
摘要:题意:给定一棵带边权的n个节点的树,首先要求出每个点的最长路,然后写成序列d[1],d[2]...d[n],然后求满足 区间最大值-区间最小值 2 #include 3 #include 4 #include 5 #include 6 #define pii pair 7 #define I...
阅读全文
摘要:题意:给定一棵n个节点的树,要在某些点上建设消防站,使得所有点都能够通过某个消防站解决消防问题,但是每个点的建站费用不同,能够保证该点安全的消防站的距离上限也不同。给定每个点的建站费用以及最远的消防站距离上限,求保证该树安全的最小花费。思路: 要选择部分点来建站解决消防问题,而总花费是有最优解的。...
阅读全文
摘要:题意:给一棵树,n个节点,给定一个数k,求任意满足dist(a,b) 2 #include 3 #include 4 #include 5 #include 6 #include 7 #define pii pair 8 #define INF 0x3f3f3f3f 9 #...
阅读全文
摘要:题意:求树的重心,若有多个重心,则输出编号较小者,及其子树中节点最多的数量。思路: 树的重心:指的是一个点v,在删除点v后,其子树的节点数分别为:u1,u2....,设max(u)为其中的最大值,点v的max(u)是所有点里面最小的,称v为树的重心。 如何求任一重心?按树形来看,max(v)可以...
阅读全文
摘要:题意:给一棵树,问每个点到其他点的最远距离是多少?思路: 按两次深搜,第一次求每个点的后代中最远的距离以及次远距离,第二次就可以从上往下逐个更新答案了。当一棵树形成了,那么每个点只有两个方向可能会有最远距离,一个是经过其父亲,一个是经过其某个孩子。当在第二次深搜时往下推时要注意,经过父亲到达本节点...
阅读全文
摘要:题意:给一棵树,每个节点都有权值,要求选择部分节点出来,使得权值之和最大,但是每对(父亲,儿子)中最多只能挑一个。思路: 比较入门的题,每个节点可以选也可以不选。若当前节点选的话,孩子必须全部不选;若当前节点不选,则孩子可以选也可以不选。 1 #include 2 #define pii pai...
阅读全文
摘要:题意:有一个n*m的矩阵,其中部分格子已经涂黑,部分涂白,要求为其他格子也上黑/白色,问有多少种涂法可以满足一下要求: (1)任意2*2的子矩阵不可以同色。 (2)所有格子必须上色。 (3)只能有两个连通分量(即1黑1白)。 注:1 2 #include 3 #include 4 ...
阅读全文
摘要:题意:有一个n*8的蜂房(6边形的格子),其中部分是障碍格子,其他是有蜂蜜的格子,每次必须走1个圈取走其中的蜂蜜,在每个格子只走1次,且所有蜂蜜必须取走,有多少种取法? 思路: 以前涉及的只是n*m的矩阵,也就是四边形的,现在变成了6边形,那么每个格子也就有6个方向可以出/进。为了方便考虑,将蜂...
阅读全文
摘要:题意:给一个n*m的矩阵,每个格子中有1个数,可能是0或2或3,出现2的格子数为2个,出现3的格子数为2个,要求将两个2相连,两个3相连,求不交叉的最短路(起终点只算0.5长,其他算1)。思路: 这题与普通插头DP有些区别了,就是要求最短路时,而且还要同时两条不相交的最短路。一开始看还是感觉挺难的...
阅读全文
摘要:题意:有一个n*m的矩阵,每个格子中有一个值(可能负值),要从左上角走到右下角,求路径的最大花费。思路: 除了起点和终点外,其他的点可以走,也可以不走。 (2)我用的是括号表示法,所以起始状态为')',即仅有一个右括号,那么到右下角也应该是只有一个右括号。因为,如果碰到()),加粗表示起点的那个...
阅读全文
摘要:题意:给一个n*m的矩阵,每个格子都是必走的,且无障碍格子,每对格子之间都有一个花费,问哈密顿回路的最小花费。思路: 这个和Formula1差不多,只是求得是最小花费,这只需要修改一下DP值为花费就行了,主要是在创建新括号,以及延续一个插头的时候花费,因为可能上一个格子有多个状态都可以转移到本格子...
阅读全文
摘要:题意:有一个n*m矩阵,其中有些格子必走,有些格子不可走,其他格子是可走也可不走,问有多少条哈密顿回路?思路: 本来是一道很简单的题,代码写多了连白痴bug都查不出了,竟然用i>=ex&&j>=ey来判定最后一个必走点后面的点!明显是错的。 其实主要在选走的格子,那么有两种选择,“走”or“不走...
阅读全文
摘要:题意:给一个n*m的矩阵,格子中是'*'则是障碍格子,不允许进入,其他格子都是必走的格子,所走格子形成一条哈密顿回路,问有多少种走法?思路: 本来是很基础的题,顿时不知道进入了哪个坑。这篇插头DP的文章够详细,推荐一看(最好不要照抄代码)。 细节要小心,比如输出用I64d,必须用long lon...
阅读全文
摘要:题意:给一个n*m的矩阵,其中#是障碍格子,其他则是必走的格子,问从左下角的格子走到右下角的格子有多少种方式。思路: 注意有可能答案是0,就是障碍格子阻挡住了去路。 插头DP有两种比较常见的表示连通信息的方式: (1)最小表示法 (2)括号表示法 本文用括号表示法实现。左括号为1,右括号为...
阅读全文
摘要:题意:给一个n*m的矩阵,为1时代表空格子,为0时代表障碍格子,问如果不经过障碍格子,可以画一至多个圆的话,有多少种方案?(n 2 #define pii pair 3 #define INF 0x3f3f3f3f 4 #define LL long long 5 using namespace s...
阅读全文
摘要:题意:有一个k*n的棋盘,要求用1*2的骨牌来铺满,有多少种方案?(k 2 #define pii pair 3 #define INF 0x3f3f3f3f 4 #define LL long long 5 using namespace std; 6 const int N=21000; 7 c...
阅读全文
摘要:题意:给一个3*n的矩阵,要求用1*2的骨牌来填满,有多少种方案?思路: 官网题解用的仍然是矩阵快速幂的方式。复杂度O(logn*83)。 这样做需要构造一个23*23的矩阵,这个矩阵自乘n-1次,再来乘以初始矩阵init{0,0,0,0,0,0,0,1}后,变成矩阵ans{x,x,x,x,x,...
阅读全文
摘要:题意:有一个n*m的棋盘,要求用1*2的骨牌来覆盖满它,有多少种方案?(n 2 #include 3 #include 4 #include 5 #define pii pair 6 #define INF 0x3f3f3f3f 7 #define LL long long 8 using n...
阅读全文

浙公网安备 33010602011771号