思维
文章平均质量分 56
光球层上的黑子
是个菜狗
展开
-
平面最短曼哈顿距离技巧 Dist Max、Lena and Matrix、Gojou and Matrix Game 三题题解
曼哈顿距离是指对于两个点a(i,j),b(i′,j′)a(i,j),b(i',j')a(i,j),b(i′,j′),它们的曼哈顿距离是∣i−i′∣+∣j−j′∣|i-i'|+|j-j'|∣i−i′∣+∣j−j′∣,记为dis(a,b)dis(a,b)dis(a,b)我们显然可以做如下变化dis(a,b)=∣i−i′∣+∣j−j′∣=max(i−i′,i′−i)+max(j−j′.j′−j)dis(a,b)=|i-i'|+|j-j'|=\max(i-i',i'-i)+\max(j-j'.j'-j)dis(原创 2022-06-11 19:38:49 · 901 阅读 · 1 评论 -
Crystalfly 简单树形DP
题意一颗树,在边上移动的时间花费为1。每个点有两个权aaa和ttt,aaa是一个只能被获取一次的点权,ttt代表当第一次进入这个点的相邻点后多久,这个点的第一个权aaa会消失。ttt的取值范围为111到333.现在你从111号点开始,任意游走,请问最大能获得的aaa是多少。思路需要特殊关注的是ttt的范围,一到三。假如我们任意跑到了一个点,那么他的子节点会立即开始计时。假如有若干个子树。我有如下两种抉择:走到其中一棵子树vvv,之后一路获取vvv子树的权,最后再去别的子树。第二种是我先前往vvv,之后原创 2022-05-01 19:51:05 · 650 阅读 · 0 评论 -
牛客练习赛86 C取钱 贪心
题目链接https://ac.nowcoder.com/acm/contest/11176/C题意取钞机有n种面值的纸币(无穷张),第一种始终为1.会优先给你大的,给出q个询问,最多取k块钱情况下,最多拿多少张钱。思路我们定义cost[i]为不使用i+1的纸币时取多少钱答案最大,gain[i]为此时对应的钱。显然cost[1]=gain[1]=a[2]-1.我们考虑递推。当我们用两种钱时,我们得到的钱是两部分,由1支付的和由2支付的。为了不获得第三种纸币,我们最多拿a[3]以下的钱,为了获得原创 2021-07-10 17:17:58 · 147 阅读 · 0 评论 -
hdu4283 区间DP
题目链接HDU最近炸了,看看题得了题意给一个序列,每个点有d i值,每个点的不满意度为出场次序减一乘di,有一个栈可以更改出场次序,问最小不满意度和思路区间DP,我们对于每个区间DP[i][j]维护他们的不满意度和,注意DP子问题不考虑父问题,也就是不需要考虑i前面出场的人对他们的不满意度影响。我们因为使用了栈,可以保证第一号用户在任意位置出栈,可以枚举他的出栈点为分界点。划分成两端区间,可以发现,第一段区间再操作时,因为入栈更晚,所以需要更早出栈,第一段区间正好满足。第二段区间入栈更晚,但没有原创 2021-07-09 17:03:20 · 249 阅读 · 0 评论 -
cf149d 区间DP
题目链接https://codeforces.com/problemset/problem/149/D题意给出一个匹配完成的括号串,每个括号都可以染成a,b两色或是不染,要求:每个匹配的括号需要有且仅一个染色相邻括号不可染同色,可都不染问染色思路复杂度O(n∗logm)O(n*logm)O(n∗logm)教训/收获代码在这里插入代码片...原创 2021-07-09 15:28:28 · 161 阅读 · 0 评论 -
LightOJ - 1422 区间DP
题目链接https://vjudge.net/problem/LightOJ-1422题意不同舞会穿不同衣服。可以随时按栈的方式穿脱。同一件衣服脱了不能重复利用,任何时候都可以穿多件衣服。问最小费衣物次数。思路看一堆题解没看明白,看一个博主的看懂了,这个题意可以如此等价,给定一个空序列,每次可以刷一个连续区间,每次刷会覆盖,问最小刷墙次数。设dp[i][j]是i到j区间答案。如果i和j颜色一致,那么我们可以选择i这里什么都不干,dp[i][j]可以直接由dp[i+1][j]转移来,否则不具有这个原创 2021-07-09 10:49:55 · 131 阅读 · 0 评论 -
acwing 284 区间DP
题目链接https://www.acwing.com/problem/content/286/题意给出树的欧拉序,树的子树结点有序,问树的可能形态数思路显然区间DP。我们让dp[l][r]为l-r的方案数,可以确定初值为dp[i][i]=1, 答案为dp[1][n]。考虑状态转移。我们不能枚举分界点个数与分界处,这样复杂度就起飞了。假设我们要枚举一个分界点,两个区间分别对应多个子树,那么可能出现重复。为了避免重复,我们可以考虑第一个子树的分界点k。比如l—r是这段区间,那么第一个子树我们令其为原创 2021-07-08 22:50:58 · 104 阅读 · 0 评论 -
cf484B 思维
题目链接添加链接描述题意给出数组,问满足aj>ai时思路复杂度O(n∗logm)O(n*logm)O(n∗logm)教训/收获代码在这里插入代码片原创 2021-07-08 20:25:20 · 119 阅读 · 0 评论 -
cf 375b 思维,双端队列
题目链接https://codeforces.com/problemset/problem/375/B题意给出01矩阵,可以交换行,问可求得纯1子矩阵最大面积思路对于每个1,预处理出向右最大能到达的1的位置r。双端队列可以实现。左到右枚举每一列,将这一列每一行的r插入数组,排序,之后遍历更新答案即可。代码#include<cstdio>#include<iostream>#include<iomanip>#include<map>#in原创 2021-06-29 10:28:37 · 162 阅读 · 0 评论 -
P3916 scc缩点入门
题目链接https://www.luogu.com.cn/problem/P3916题意有向图,问每个点可达最大节点编号思路如果是树,那么直接树形DP但是是有向图,好吧一个做法是反向建图,从大到小做dfs,很讨巧的方法。这里说下缩点说来惭愧,学了tarjan那几件套都没怎么做过题,一眼没看出来。就是求强连通分量,然后缩点成dag,直接跑树形dp就行了。缩点的操作就是跑出scc数组后,重新建图(原图已经无所谓了),改成sc个点即可。重新建图拿数组存一下边就好了(或者你也可以混用邻接矩阵原创 2021-06-25 19:58:30 · 261 阅读 · 0 评论 -
CF280C 期望的可加性
题目链接https://codeforces.com/problemset/problem/280/C题意给出一有根树,每次等概率删除一个点和其子树,问删完期望步数思路期望是有可加性的,删掉所有节点的期望就是所有节点被删的期望的和。显然一个节点被删的花费是1,但是它能否贡献期望是有概率的,假设他的祖先节点比他先被删除,那么他是不可以产生贡献的,因此我们可以将他的期望看成是这样E(x)={1,x先于祖先被删除0,x后于祖先被删除E(x)=\left\{ \begin{ar原创 2021-06-24 12:15:02 · 405 阅读 · 0 评论 -
cf 1520G To Go Or Not To Go? 思维,bfs
题目链接https://codeforces.com/contest/1520/problem/G题意给出网格,格子中有墙。向相邻无墙位置移动花费m,有的位置有权值w,这样的点是传送门,可以从一个传送门传到另一个传送门,花费w1+w2。问左上到右下花费。思路最开始以为是一个裸的最短路,通过技巧将O(n²)边降到O(n)即可。就是每个点向周围可移动连边,建立sp点,每个传送门向他连边权为w,跑最短路即可。正确性没问题,但会MLE(2e7的数组RE,再大一点就MLE,真是麻了)。观察发现,传送门最多原创 2021-05-11 21:40:06 · 437 阅读 · 1 评论 -
2021 MetaCamp 7-5 直径 树的直径,思维
题目链接NOTHING题意给出图的笛卡尔积定义:点集做笛卡尔积,比如我们用数字123代表点集V1,字母abc代表点集V2,那么新图的点集V就是二元组(1,a)(1,b)(1,c)(2,a)…的集合。假如1-2,b-c有边,那么新图的边集就是(1,a)->(2,a),(1,b)->(2,b),(1,c)->(3,c),(1,b)->(1,c)…这样的集合。定义δ(a,b) 为两点最短路, tr(G) 代表图G上任意三元组中3个δ和的最大值给出n棵树,问做笛卡尔积后tr的值原创 2021-05-08 21:32:24 · 324 阅读 · 3 评论 -
Codeforces 808F 最大权独立点集,二分
题目链接https://codeforces.com/contest/808/problem/F题意给出n个三元组<p,c,l>,任选若干个,要求符合相加为质数的两个组不能同时选∑p>=k求所有可行选择方法中max{l}最小值思路首先可知答案单调,我们可以二分l来进行处理至于每次处理,条件一中相加为质数的情况其实可以分为两种:1+1和奇数加偶数。对于1+1型,显然我们只能选择一个p最大的1时是最优的,而奇数+偶数这个条件就很有意思了,我们把c按奇偶性划分,对所有不能一原创 2021-04-08 21:56:20 · 137 阅读 · 0 评论 -
CF1066F Yet another 2D Walking 思维,最短路,啥b建图
题目链接https://www.luogu.com.cn/problem/CF1066F题意二维地图,起始(0,0),给出若干点,要求遍历每一点,两点距离为曼哈顿距离,点有分层level=MAX(X,Y),遍历下一层的点之前一定要遍历全上一层的点,求最短距离。思路CF分区是个2100分DP,本来不打算补了(丢给队友.JPG)但见到一篇最短路的题解,看完直呼神仙做法,索性补了一下。首先需要发现一个特性,我们对于每一层的点,要想保证这一层走的最优,那么这一层遍历的起点和终点都应该是这一层点的"端点"原创 2021-04-01 22:37:49 · 144 阅读 · 0 评论 -
洛谷P2962 位运算,meet in middle
题目链接https://www.luogu.com.cn/problem/P2962题意给出n点m边无向图,每一个节点都是开关,触发后会将它自己和所有直接相连节点状态改变(0->1,1->0)。初始全部状态为0,问最少几步全1。n<35思路首先易知任意一个节点最多摁下1次,因为摁下两次相当于没有操作最朴素的方法就是搜索,我们利用二进制数来模拟点开关状态,不用常规的存图方法,我们用数组g记录节点x触发后可以直接改变的点。从1-n枚举每个点开关状态,触发新的点后的状态转移可以用二进原创 2021-03-27 22:15:30 · 311 阅读 · 0 评论 -
CodeForces - 1497E1 判断完全平方数 质因数分解
题目链接https://vjudge.net/problem/CodeForces-1497E1题意给出数组,让你将他分为连续的ans段,使得每一段数组内的数字两两相乘不出现完全平方数,最小化ans。思路复杂度O(n∗logm)O(n*logm)O(n∗logm)教训/收获代码在这里插入代码片...原创 2021-03-25 22:42:12 · 229 阅读 · 0 评论 -
CodeForces 1484D Playlist 思维暴力
题目链接https://codeforces.com/problemset/problem/1484/D题意给出一个数组,从1开始循环检查,如果gcd(a[i],a[i+1])=1(若i=n,那么比较a[n]和a[1]),那么就把a[i+1]移除。注意不能连续移除两个元素。问最终移除元素的数量和移除次序思路复杂度O(n∗logm)O(n*logm)O(n∗logm)教训/收获代码在这里插入代码片...原创 2021-03-23 22:27:51 · 296 阅读 · 0 评论 -
CF 1490G - Old Floppy Drive 思维,二分
题目链接https://codeforces.com/problemset/problem/1490/G题意给定数组a(如1,2,2,3),构造一个A数组,为a数组的循环拼接(如1,2,2,3,1,2,2,3…)。m个询问,对于每个询问q,输出最小的i,使得A数组前i+1个数字的和大于等于q思路我们需要如下几个数组sum:a的前缀和max_:a前缀和的最大值易知max_数组单调不降,可用二分搜索。在某一次询问q中,如果q<=max_[n],那就是说答案比n小,我们在max_数组二分查原创 2021-03-05 18:38:16 · 145 阅读 · 0 评论 -
codeforces 431C - k-Tree 简单DP
题目链接https://codeforces.com/problemset/problem/431/C题意满k叉树,每一个节点边权依次为1-k,求起点为根,长为n,存在大于等于d的边权边的路径数思路复杂度O(n∗logm)O(n*logm)O(n∗logm)教训/收获代码在这里插入代码片...原创 2021-01-05 22:03:34 · 204 阅读 · 0 评论 -
CodeForces - 1443D Extreme Subtraction 差分应用
题目链接https://vjudge.net/problem/CodeForces-1443D/origin题意每一次可以对前缀或后缀减少小于等于n的值,问是否可以变为全0。思路首先明确,由于可以多次操作,所以减的值其实是没有小于等于n的限制的,可以当成若干次减少1操作。看到区间操作,考虑差分,当元素全为0时,其差分数组也是全为0,我们考虑两种操作对于差分数组的影响,假设第一种操作到i为止,第二种操作从i开始,那么第一种操作后:diff[1]-1,diff[i+1]+1,第二种操作后:diff[原创 2020-11-05 22:35:29 · 218 阅读 · 0 评论 -
2020多校3 1004 Tokitsukaze and Multiple
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=6794题意给出长为n的数组和m,可以任意次合并相邻元素,求最多可以同时有多少个元素模m为0思路通过前缀和相减,我们可以很方便的维护某一段区间的和,以此为启发,我们首先维护一下数组前缀和,当存在p1<p2同时p1前缀和模m和p2前缀和模m值相等时,说明p1和p2这段数组是可以通过合并达到要求的。我们预处理出前缀和,利用map维护某一前缀和模p的数字是否出现过。从左到右遍历每个元素,如果这个元素前缀和原创 2020-11-01 17:31:09 · 121 阅读 · 0 评论