上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 29 下一页
摘要: s[i]为差分后的“i这头牛前有几头比它高”,计算答案的时候加成前缀和,假设第一头最高减一下即可 用map记录一下被加过的区间,避免重复 cpp include include include include using namespace std; const int N=10005; int n 阅读全文
posted @ 2018-05-05 11:40 lokiii 阅读(173) 评论(0) 推荐(0) 编辑
摘要: c[x][y]为从(x,y)到(n,m)的最大值,记忆化一下 有个剪枝是因为y只能+1所以当n x m y时就算x也一直+1也是走不到(n,m)的,直接返回0即可 cpp include include using namespace std; const int N=105,dx[]={ 1,0, 阅读全文
posted @ 2018-05-05 11:24 lokiii 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 二分答案,把边权小于mid的边的两端点都并起来,看最后是否只剩一个联通块 阅读全文
posted @ 2018-05-05 10:59 lokiii 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 参考:https://www.cnblogs.com/N C Derek/archive/2012/07/11/usaco_09_open_tower.html 虽然长得很像斜率优化,但是应该不算…… 贪心是错的,对拍出好多异常情况 s[i]为前缀和,从顶向下dp;设f[i]为本层宽度,g[i]为这 阅读全文
posted @ 2018-05-05 10:39 lokiii 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 参考:http://hzwer.com/4361.html 坐标开long long,inf开大点 先曼哈顿转切比雪夫(x+y,x y),距离就变成了max(x',y'); 先按x排序,维护两个指针,指针内区间的x差总是 include include include using namespace 阅读全文
posted @ 2018-05-05 09:07 lokiii 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 还以为是dp呢 首先默认答案是n 对于一个影子,如果前边的影子比它高则可以归进前面的影子,高处的一段单算; 和他一样高的话就不用单算了,ans ; 否则入栈 阅读全文
posted @ 2018-05-04 21:56 lokiii 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 我是怎么想出来的…… 把种族为0的都变成 1,按位置x排升序之后,s[i]表示种族前缀和,想要取(l,r)的话就要\\( s[r] s[l 1]==0 s[r]==s[l 1] \\),用一个map存每个s[i]最早出现的牛的下一个牛的位置,然后每次取到一个s[i],如果mp[s[i]]!=0,则用 阅读全文
posted @ 2018-05-04 21:40 lokiii 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 参考:https://blog.csdn.net/u010336344/article/details/53034372 神一样的线段树 线段树上维护:ll从左开始最长空段;rr从右开始最长空段;len区间中最长空段;tg: 1不全是空的,0区间内全是空的,1区间内全是满的;lz下传标记: 1没标记 阅读全文
posted @ 2018-05-04 21:12 lokiii 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 脑子一抽写了个堆,发现不对才想起来最值用二分 然后判断的时候贪心的把不合mid的区间打通,看打通次数是否小于等于m即可 阅读全文
posted @ 2018-05-04 16:52 lokiii 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 高端贪心,好久没写splay调了好久…… 以下v为价格,w为鲜嫩度 把牛和草都按v排升序,扫草,首先把v小于等于当前草的牛都丢进splay,这样一来splay里全是可选的牛了,按w排序,然后贪心的为当前的草取牛:w小于等于当前草的w的牛,取出来删除,ans加上当前草的价格(没有则跳过) 取牛的时候统 阅读全文
posted @ 2018-05-04 16:34 lokiii 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 参考:https://blog.csdn.net/qq_34564984/article/details/53843777 可能背了假的板子…… 对于每个灯建立方程:与它相邻的灯的开关次数的异或和为1 异或高斯消元,然后dfs,遇到自由元就分两种情况走,答案取max,加上最优性剪枝 cpp incl 阅读全文
posted @ 2018-05-04 11:17 lokiii 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 从每个奶牛所在草场dfs,把沿途dfs到的草场的con都+1,最后符合条件的草场就是con==k的,扫一遍统计一下即可 cpp include include using namespace std; const int K=105,N=1005; int k,n,m,p[K],h[N],cnt,c 阅读全文
posted @ 2018-05-04 10:12 lokiii 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 先跑一遍取max版的Floyd,直接用数组回答询问即可 cpp include include using namespace std; const int N=305,inf=1e9; int n,m,q,a[N][N]; int read() { int r=0,f=1; char p=getc 阅读全文
posted @ 2018-05-04 09:59 lokiii 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 考虑每头牛到达之后的影响,u到达之后,从1到其子树内的点需要放慢的都多了一个,p为u子树内点的牛ans会加1 用线段树维护dfs序,每次修改子树区间,答案直接单点查询p即可 cpp include include using namespace std; const int N=100005; in 阅读全文
posted @ 2018-05-04 09:50 lokiii 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 凸包模板 cpp include include include include using namespace std; const int N=5005; int n,w,top; struct dian { double x,y; dian(double X=0,double Y=0) { x 阅读全文
posted @ 2018-05-04 09:22 lokiii 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 参考:https://blog.csdn.net/cgh_andy/article/details/52506738 没有get到什么重点的dp……做的莫名其妙 注意滑雪一个坡可以滑很多次 设f[i][j]为时间为i能力为j的最大滑雪次数,预处理l[i][j]为在i时获得j能力的最晚开始时间,w[i 阅读全文
posted @ 2018-05-04 08:27 lokiii 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 这不就是个n方dp吗……看了眼洛谷题解简直神仙打架 我全程没用到n…… 把休息时间并入产奶时间,注意“结束时间不挤奶”,所以ei=ei+r 1,注意这个 1! 然后按r排序,设f[i]为选i的最大收益,因为r是单调的所以直接从左到右扫一遍满足rj include include using name 阅读全文
posted @ 2018-05-03 21:15 lokiii 阅读(169) 评论(0) 推荐(0) 编辑
摘要: tag是假的,用了及其诡异的方法判负环 正权无向边和负权有向边的图 cpp include include include using namespace std; const int N=505,inf=210000000; int n,m,w,h[N],cnt,d[N]; struct qwe 阅读全文
posted @ 2018-05-03 20:36 lokiii 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 在洛谷上被卡了一个点开了O2才过= = bfs即可,为方便存储,把所有坐标+500 cpp include include include using namespace std; const int N=1005,dx[]={ 1,1,0,0},dy[]={0,0, 1,1}; int n,sx, 阅读全文
posted @ 2018-05-03 20:13 lokiii 阅读(124) 评论(0) 推荐(0) 编辑
摘要: dfs,如果一个点的儿子、本身、父亲都没有塔,就在父亲上建一个 原理不明…… cpp include include using namespace std; const int N=10005; int n,h[N],cnt,ans; bool v[N]; struct qwe { int ne, 阅读全文
posted @ 2018-05-03 19:58 lokiii 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 弗洛伊德之后按序列加起来即可 cpp include include include using namespace std; const int N=50005; int n,m,a[10001],d[101][101],ans; int read() { int r=0,f=1; char p= 阅读全文
posted @ 2018-05-03 19:36 lokiii 阅读(73) 评论(0) 推荐(0) 编辑
摘要: 仿佛学到了贪心的新姿势…… 考虑相邻两头牛,交换它们对其他牛不产生影响,所以如果交换这两头牛能使这两头牛之间的最大值变小,则交换 阅读全文
posted @ 2018-05-03 19:26 lokiii 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 忘开long long了居然没WA 二分答案,枚举判断看最后需要的月份数是否小于等于要求的即可 阅读全文
posted @ 2018-05-03 17:55 lokiii 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 是时候复习一波背包了 完全背包裸题 cpp include include using namespace std; int m,n,a[30]; long long f[10005]; int main() { scanf("%d%d",&m,&n); for(int i=1;i 阅读全文
posted @ 2018-05-03 17:29 lokiii 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 不能用read会TLE!!不能用read会TLE!!不能用read会TLE!! 一开始以为要维护每个点,线段树写了好长(还T了…… 首先dfs一遍,求出点1为集会地点的答案,处理处val[u]为以1为根u子树点权和 然后从1带着当前点答案ans跑dfs,向儿子转移的时候就是带下去儿子的ans'就是a 阅读全文
posted @ 2018-05-03 17:13 lokiii 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 这几天写USACO水题脑子锈住了……上来就贪心,一交就WA 事实上这个是一个叫最短路树的东西,因为能保证只有一条最短路,所以所有最短路合起来是一棵以1为根的树,并且在这棵树上,每个点被精灵占据的路是它通向father的 先spfa把最短路dis[]和最短路树求出来,把被选入最短路树的边打上删除标记 阅读全文
posted @ 2018-05-03 15:18 lokiii 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 因为是单调不降或单调不升,所以所有的bi如果都是ai中出现过的一定不会变差 以递增为例,设f[i][j]为第j段选第i大的高度,预处理出s[i][j]表示选第i大的时,前j个 a与第i大的值的差的绝对值 的和。 转移显然是 $$ f[i][j]=min{f[i 1][k]+s[i][j] s[i][ 阅读全文
posted @ 2018-05-03 10:11 lokiii 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 按s从大到小排序,逆推时间模拟工作 阅读全文
posted @ 2018-05-03 07:58 lokiii 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 因为交换相邻两头牛对其他牛没有影响,所以可以通过交换相邻两头来使答案变小。按照a.t b.f排降序,模拟着计算答案 cpp include include include using namespace std; const int N=100005; int n; long long ans,su 阅读全文
posted @ 2018-05-02 22:00 lokiii 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 压一维状态,转移时把符合条件的上一行加上 cpp include include using namespace std; const int N=5005,mod=1e9; int m,n,x,a[20],st[N],k,f[20][N],ans; int main() { scanf("%d%d 阅读全文
posted @ 2018-05-02 21:31 lokiii 阅读(96) 评论(0) 推荐(0) 编辑
上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 29 下一页