摘要: 题目传送门 看到数据范围就果断装压。 设f[i][j]表示i状态下最后一个数字为a[j]。 code: 阅读全文
posted @ 2018-01-24 18:58 Cptraser 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 其实打表找一找规律可以得出: 证明则是设q/p为一条直线的斜率。 p=q时则是求直线上的整点的横纵坐标和,p≠q时则是求直线上下整点的和。 code: 阅读全文
posted @ 2018-01-21 19:14 Cptraser 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 这道题一开始我还以为是贪心,sort一遍直接取中点然后求最优值。 但写了之后才发现错误,设置的谷仓只要是一段区间的中点即可。这段区间的两端一定是两片谷田。 所以枚举区间的左端点,二分右端点,但问题是如何O(1)判断? 设sumi表示1~i点的和。 L~R区间所需要的费用分成两段来求。 一 阅读全文
posted @ 2018-01-20 14:57 Cptraser 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 背包的变形,不得不说卡了我很久(估计是下午睡傻了)。 设f[i][j]为前i个物品剩下j个挂钩。 f[i][j]=max(f[i-1][j],f[i-1][max(j-a[i].x,0)+1]); 显然f[i-1][j]表示不挂,而f[i-1][max(j-a[i].x,0)+1]表示挂 阅读全文
posted @ 2018-01-17 16:48 Cptraser 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 由题意得是最小割问题,又由最大流最小割定理可得只需要求无向图的最大流即可。 建双向边,跑Dinic,EK会超时。 注意在DFS时要加"if(!res)dist[now]=0;"这句话,不然会超时。 这句话因为下次DFSnow这个点时得到的最小流量为0,所以就没必要DFS下去,一个剪枝。 阅读全文
posted @ 2018-01-14 20:21 Cptraser 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 例题传送门 Dinic算法是网络流最大流的优化算法之一,每一步对原图进行分层,然后用DFS求增广路。时间复杂度是O(n^2*m),Dinic算法最多被分为n个阶段,每个阶段包括建层次网络和寻找增广路两部分。 Dinic算法是网络流最大流的优化算法之一,每一步对原图进行分层,然后用DFS求增广路。时间 阅读全文
posted @ 2018-01-14 14:41 Cptraser 阅读(201) 评论(1) 推荐(0) 编辑
摘要: 题目传送门 裸的最小生成树。 code: 阅读全文
posted @ 2018-01-10 15:23 Cptraser 阅读(116) 评论(1) 推荐(0) 编辑
摘要: 题目传送门 设x[i]表示i+1向i传的糖果数,x[n]表示1向n传的糖果数,a'=(a[1]+...a[N])/N a[1]+x[1]−x[n]=a' a[2]+x[2]−x[1]=a' a[3]+x[3]−x[2]=a' ⋯⋯ a[n−1]+x[n−1]−x[n−2]=a' a[n]+x[n]− 阅读全文
posted @ 2018-01-09 19:24 Cptraser 阅读(114) 评论(1) 推荐(0) 编辑
摘要: 题目传送门 找规律。 画一个像这样的图: 不同颜色为不同层,因为函数图像可对称,所以只考虑K<=N/2的情况。 最小为min(K,N-K+1)*2。 N=1时特殊考虑,答案为1。 code: 阅读全文
posted @ 2018-01-09 12:56 Cptraser 阅读(76) 评论(1) 推荐(0) 编辑
摘要: 题目传送门 Map水过(或set也行)。 code: 阅读全文
posted @ 2018-01-07 19:58 Cptraser 阅读(137) 评论(1) 推荐(0) 编辑
摘要: 题目传送门 BZOJ水题,for i=1~N,答案加上N/i即可 ANS=∑N/i(i∈{1~N}) code: 阅读全文
posted @ 2018-01-07 19:56 Cptraser 阅读(111) 评论(1) 推荐(0) 编辑
摘要: 题目传送门 差分约束基础,对于每种关系建不同的边,求是否有负环。 code: 阅读全文
posted @ 2018-01-07 19:51 Cptraser 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 乍一看好像是搜索题,但搜索明显会超时。 此处采用IDA*的方法求解。 IDA*算法就是基于迭代加深的A*算法。 code: 阅读全文
posted @ 2018-01-07 18:59 Cptraser 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 分析题意可得,希望求与每个数最相近的数。 二叉搜索树的简单题,因为可能被卡成O(N),考虑平衡树。 因为Treap较简单,此处用Treap编写代码。 code: 阅读全文
posted @ 2017-12-27 14:59 Cptraser 阅读(148) 评论(1) 推荐(0) 编辑
摘要: 一、欧几里得算法(辗转相除法) 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: gcd函数就是用来求(a,b)的最大公约数的。 gcd函数的基本性质: gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(|a|,|b|) int gcd(in 阅读全文
posted @ 2017-12-21 18:14 Cptraser 阅读(418) 评论(1) 推荐(0) 编辑