上一页 1 ··· 39 40 41 42 43 44 45 46 47 ··· 68 下一页
摘要: 如果是奇数,可以从前面,或者一半或者一半加1处转移 如果是偶数,可以从前面或者一半处转移 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e7+1; ll f[N]; int main() 阅读全文
posted @ 2020-05-08 20:52 朝暮不思 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 这题因为只能切两刀,所以考虑枚举一个枚举思维 首先我们求一遍前i个切1刀的大小,之后枚举切两道,因为是连着切,所以直接枚举位置即可,当前位置的答案就是s[i]-s[i-k]和前i-k切一刀的答案 #include<bits/stdc++.h> using namespace std; const i 阅读全文
posted @ 2020-05-08 16:11 朝暮不思 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 很多求和相除求最大值的问题,都是01分数规划,本题就是一个负环+01分数规划的问题 对于这种问题,先二分答案,然后移项,将点权转化为边权,变成判环问题 本题建图方式比较巧妙,将每个字符串的前两位和后两位当作点,边权就是字符串的长度。 这样复杂度还是很高,因此有两种优化方式,一种将队列换成栈,一种是使 阅读全文
posted @ 2020-05-07 11:01 朝暮不思 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 技巧,将所有点距离置为0,并加入队列。 当某个最短路大于等于n,根据容斥原理得负环 #include<bits/stdc++.h> using namespace std; const int N=510,M=52100; int h[M],ne[M],e[M],w[M],idx; int n,m1 阅读全文
posted @ 2020-05-07 09:16 朝暮不思 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 先求一遍最小生成树,再枚举每一个非树边,如果能替换最大值就替换,如果相等则替换次大值 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=510,M=10010; int h[N], e[N * 阅读全文
posted @ 2020-05-06 20:58 朝暮不思 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 这题具有单调性质,可以二分,但是我们发现如果使用并查集维护kruscal,那么无需二分,直接枚举答案即可 #include<bits/stdc++.h> #define x first #define y second using namespace std; typedef pair<int,in 阅读全文
posted @ 2020-05-06 19:08 朝暮不思 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 这题让我们对边权进行赋值,首先肯定想到,假如不考虑边权,那么我们也是要求a-b,b-c的路径最短是多少,因为路径少意味着权值少 这里有两种情况,一种是这两者之间存在某个点x,使得部分路径重复,一种是不存在 其实这两个是一种情况,第二种情况的b就是x。这样我们发现重复的路径要走两边,肯定是将他赋值到最 阅读全文
posted @ 2020-05-06 16:28 朝暮不思 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 设计状态为走了k步,从i-j的最短路,由于加法满足结合律,因此可以用倍增来优化逼近n 这样可以log复杂度逼近,代码与floyd相似,但是状态的定义完全不同,本题还需要离散化一下,因为原数太大 #include<bits/stdc++.h> using namespace std; const in 阅读全文
posted @ 2020-05-05 21:41 朝暮不思 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 求最小环的原理是dp的思想,我们以环中最大的节点作为断点,这样在求floyd的过程中,在更新之前,可以用i和k以及j和k相连的两条线路以及原先i和j在前k-1已经求出的最短路当作环进行比较 因为我们分割出了所有情况。而在求取方案的时候,我们设置一个pos数组,表示最短路的分割点,进行递归求取 #in 阅读全文
posted @ 2020-05-05 12:01 朝暮不思 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 使用floyd求取传递闭包,每次都进行判断 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=27; int g[N][N]; bool st[N]; int n,m; int d[N][N] 阅读全文
posted @ 2020-05-05 10:12 朝暮不思 阅读(174) 评论(0) 推荐(0) 编辑
上一页 1 ··· 39 40 41 42 43 44 45 46 47 ··· 68 下一页