上一页 1 ··· 32 33 34 35 36 37 38 39 40 ··· 42 下一页
摘要: 思路: dp[pos][pre]代表长度为pos的不大于pre的个数 阅读全文
posted @ 2018-07-07 18:31 KirinSB 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 思路: 详解 数位DP入门题dp[pos][sta],pos代表当前位数是第几位,sta代表当前状态,因为题目中只要不出现64,所以当前状态只分为两种:前一位是6或不是。 阅读全文
posted @ 2018-07-07 14:44 KirinSB 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 思路: 最大步骤有20,直接BFS会超时。 因为知道开始情况和结果所以可以用双向BFS,每个BFS规定最大步骤为10,这样相加肯定小于20。这里要保存每个状态搜索到的最小步骤,用Hash储存。当发现现有状态已经在另一路出现了,那么就输出两者相加的步骤和。 代码: 阅读全文
posted @ 2018-07-06 18:55 KirinSB 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 思路: 要用优势队列,因为有的+2,有的+1,所以队列中的步长是不单调的,所以找到一个答案但不一定最小,所以用优势队列把小的放在队首。 要记录状态,所以开了三维,题目和昨天做的那道小明差不多 vis开的int型赋值bool型WA了半天 代码: 阅读全文
posted @ 2018-07-06 14:41 KirinSB 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 思路: 如果用朴素的方法算O(n^4)超时,这里用折半二分。把数组分成两块,分别计算前后两个的和,然后枚举第一个再二分查找第二个中是否有满足和为0的数。 注意和有重复 阅读全文
posted @ 2018-07-06 11:39 KirinSB 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 题意:求每个长度为k的数组的最大值和最小值 思路: 1.用线段树创建维护最大值和最小值,遍历询问,简单复习了一下...有点手生 2.单调队列: 可以看一下详解 单调队列顾名思义就是一个单调递增或者递减的队列,我们可以通过队列瞬间得到当前队列的最大值和最小值。以查找当前区间最小值为例,我们需要维护一个 阅读全文
posted @ 2018-07-05 19:09 KirinSB 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 思路: 一道BFS题,和以前的BFS有点不同,这里的vis数组需要记录每次走时的状态,所以开了3维,只对该状态下的vis修改。 注意坑点:S的位置是可以走的 代码: 阅读全文
posted @ 2018-07-05 16:59 KirinSB 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 思路: 直接DP也能做,这里用斜率DP。 dp[i] = min{ dp[j] + ( sum[i] - sum[j] + 10 )*pr[i]} ; k<j<i => dp[j] - dp[k] <pr[i]*( sum[j] - sum[k] ) 再套模板 阅读全文
posted @ 2018-07-05 11:22 KirinSB 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 思路: 莫队模板题,转换几次就是找逆序数,用树状数组来储存数就行了 注意要离散化 代码: 阅读全文
posted @ 2018-07-05 00:08 KirinSB 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 题意:求最小生成树第K大的边权值 思路: 如果暴力加边再用Kruskal,边太多会超时。这里用一个算法来减少有效边的加入。 边权值为点间曼哈顿距离,那么每个点的有效加边选择应该是和他最近的4个象限方向的点。这里用一个树状数组维护以y-x为索引的y+x的值,然后这个数组所储存的就是一个点的第一象限方向 阅读全文
posted @ 2018-07-01 11:30 KirinSB 阅读(199) 评论(0) 推荐(0) 编辑
上一页 1 ··· 32 33 34 35 36 37 38 39 40 ··· 42 下一页