随笔分类 - BZOJ
摘要:题目传送门 差分约束基础,对于每种关系建不同的边,求是否有负环。 code:
阅读全文
摘要:题目传送门 乍一看好像是搜索题,但搜索明显会超时。 此处采用IDA*的方法求解。 IDA*算法就是基于迭代加深的A*算法。 code:
阅读全文
摘要:题目传送门 分析题意可得,希望求与每个数最相近的数。 二叉搜索树的简单题,因为可能被卡成O(N),考虑平衡树。 因为Treap较简单,此处用Treap编写代码。 code:
阅读全文
摘要:题目传送门 较水,开两个桶即可。 题目可以理解为,将大于B的数看为1,小于B的数看为-1,将以B这个数为中位数的序列左右分为两半,加起来为0. code:
阅读全文
摘要:题目传送门 初看这道题,以为是一道挺难的题目,但仔细看发现,不是只要爆搜就好了吗? 只需要对前12个素数进行爆搜即可。 一个数的因数个数=素数次数+1全部乘起来。 code:
阅读全文
摘要:题目传送门 这是一道DP+最短路径的好题。 首先预处理每天每个点的最短路径。 用SPFA进行处理。即cost[i][j]为第i天到底j天的1到M点的最小花费。 就可以水水的DP。 设f[i]为第i天的最优方案,f[i]=min(f[i],f[j]+cost[j+1][i]*(i-j)+K); 即从第
阅读全文
摘要:题目传送门 我们设f[i]表示用机器A加工,时间还剩下i时的最优加工时间。 对于每一个时间可以加工的物品,有以下几个选择: 1、用机器A加工 2、用机器B加工 3、A和B一起加工 所以得到方程: f[j]+=a[i][2]//用机器B加工,所以时间还剩j。 f[j]=min(f[j],f[j-a[i
阅读全文
摘要:题目传送门 这是一道并查集的题目,相信很多人都看出来了。 用一个类似Kurskal的东西求出最近的最大值。 对于一些可以划分在同一个部落里的边,我们一定是优先选择短边合并。 code:
阅读全文
摘要:题目传送门 一看便知,二分图最大匹配的裸题。 但是,用匈牙利算法的话,每一次的memset会超时,所以这里使用时间戳优化。 [时间戳] 记录每一次操作是第几次,只要不是现在这个操作的话就相当于“0”。 code: #include <bits/stdc++.h> #define MAXN 10001
阅读全文
摘要:题目传送门 由题意可得,这道题是求使一些行上的1是否能两两不同行,两两不同列。 于是我们就可以把1点的i与j连边,做一遍二分图匹配。 如果每一行即i都可以匹配到,那么就有解。 code: /*******************************************************
阅读全文
摘要:题目传送门 又是一道BZOJ的水题。 DP,F[i]表示第i只鼹鼠出现后可以砸几只。 F[i]=max(F[i],F[j]+1); 但要满足time[i]-time[j]>=abs(x[i]-x[j])+abs(y[i]-y[j]) code: /**************************
阅读全文
摘要:转自YXDs 题目传送门 不知道今天是怎么了,可能是空调吹多了吧,一直不在状态,连递推题我都做不来了……(扎Zn了老Fe……) 然而,不管环境如何恶劣,我们仍要努力学习,为了自己的明天而奋斗。(说的好像跟真的一样) 其实这题就是一个递推,现在我们考虑第i个数,定义f[i][j]表示序列里有i个数,逆
阅读全文
摘要:题目传送门 我不得不说这是一道BZOJ的大水题。 一眼就可以看出的布尔型DP。 F[i][j]表示前i天能否达到j音量。 code: #include <cstdio> #include <cctype> #define C c = tc ( ) using namespace std; inlin
阅读全文
摘要:题目传送门 这是一道单调栈的问题,单调栈维护所有数的最大值。 查询操作时只需要二分找答案即可,枚举栈内的数应该也不会超时。 code: /************************************************************** Problem: 1012 User
阅读全文
摘要:题目传送门 这是一道贪心的问题。 总体做法是这样的:先按照报废的快慢从小到大SORT一遍,优先修报废快的。同时开一个大根堆(C++的朋友可以用priority_queue),用来记录已经修了的建筑的耗时大小。 在优先修建筑的时候,如果在当前所用的时间加上修的时间超过了报废时间了的话,就找出大根堆的T
阅读全文