17.8.8 B组总结

今天感觉题目好坑啊。

1:什么鬼,你怎么算出来50的?又不解释一下,好吧我算了半小时都没算出50,开始怀疑人生,弃了弃了。。。。。
正解:dfs即可。

2:这题,感觉是可以切的啊,算出来擦掉这个数后能否产生更多的ai=i不就好了么,然后插入还有区间维护那些就乱搞一下,不对,这样子会错的。。。。因为是贪心,还是设个dp不就好了么:设fi,j为当前选到第i个数,剩余j个数的最优值。
那么fi,j = max(fi - 1,j , fi-1,j-1, + 1) // a[i] = j;
fi,j = max(fi-1,j , fi-1,j-1);//a[i]!=j.

3:弃疗了,想不出任何方法做,只想到dp,但感觉会超时,后面我发现这道题是以前训练做过的,但我那次没来,悲剧了。。。。。。但dp+二分也很简单啊

4:先打个暴力分再说,好了这里stl队列弄个大根堆小根堆维护一下不就好了么。。。。。。但我tmd之前有心理阴影,有一题比赛的时候别人手打堆满分,而我打了stl tmd只有 70分!可能我现在用stl队列比暴力还要慢,还是不理了吧。。。。。
然而正解是线段树/堆/stl,好了我看到后气炸了。。。。

好了我们讲讲stl队列的做法:先建大根堆小根堆,一开始把所有读入的数据都放入小根堆,get一次把堆顶弄出去,好了现在大根堆的作用来了:它里面存着黑箱中最小的i个数,这能干嘛呢?你读入的x在比大根堆堆顶小的时候,说明x就在小根堆里面,那么就相当于大根堆堆顶被x挤掉了,那就把y放到小根堆里,如果x>y,则放入小根堆里。

好了这次比赛告诉我以后看题要认真,别把能ak的题变成个140分的悲剧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值