中级数据结构集训
我不是手机
这个作者很懒,什么都没留下…
展开
-
acwing 297. 赤壁之战 树状数组优化DP 寒假集训
题目链接 想要求长度为M的子序列,我们可以拿DP方程来计算,并且这个DP也是比较好看出来的DP[i][j]代表着i后j位置中的所有长度为j的子序列,递推方程为 for(int i=1;i<=n;i++){ for(int j=2;j<=m;j++){ for(int k=1;k<i;k++){ if(a[k]<a[i]) dp[i][j]+=dp[k][j-1] } } } } 的一个三重循环,但是n^3的暴力一定是会超时的,所以我们可以用树状数组来优化一个原创 2021-01-27 19:14:06 · 111 阅读 · 0 评论 -
power oj 2920: 第K大1.0 优先队列
题目链接 题意是在一组数组里面,对每一个数求它右边的最大值。 题解:我们把可以不断将数字都放进一个优先队列里面,做一个在线操作:对于每一次放入a[i]的数,通过比较将队列前面比他小的所有数字弹出,记录这些数字被弹出的次数。 如果==3就直接用数组记录这个数右边第k个数的下标为i,如果不等于3就将它暂且放在一个双端队列中(至于为什么是deque,是因为比较好操作,用queue或者stack都是可以的)。 在这个放入的a[i]将它前面所有的数字都弹出并标记后,我们把在deque中的所有数字再放回优先队列中,因为原创 2021-01-26 20:15:19 · 103 阅读 · 0 评论 -
K Smallest Sums UVA - 11997 贪心+优先队列 寒假集训
题目链接 这道题网上说的奇奇怪怪,在加上我地址符看不太懂,所以比较难以理解 其实原理比较简单,我们先把所有的数组进行sort,并将第一个数组命名为A数组,后面的命名为Bn数组,那么我们利用优先队列进行选择最优解,就是一直用B数组去维护A数组。 将A1去加上B1到n所有数并放入优先队列,同样一直遍历到An去加上B1到n的值放入优先队列,这样我们取A的前n个作为维护后新的A数组,重复这样的操作到Bn这样答案就是数组A的所有值了。 这里有个小问题,如果你不断把A1加B1到n的值,An加B1到n的值放入队列,再去取原创 2021-01-26 20:30:30 · 96 阅读 · 0 评论