
剪枝
xyc1719
努力会说谎,但努力不会是白费
展开
-
排名【二分答案】【数据结构+模拟】
【一句话题意】给定n个人的初始位置,再给出每个人的速度,问在无限长的跑道上前m次“追赶事件”(一个人超过另一个人)n,m<=1e5 【分析】 这道题二分答案乱搞,先二分时间,再归并排序求逆序对,然后有个不强和另一个超强的剪枝。(弱)如果二分出的mid,求得的逆序对个数等于m,则跳出循环。(强)如果逆序对个数已经大于m了,则结束归并排序。 std是说,用链表模拟(或者说维护?)相对位置,再用优...原创 2018-11-06 16:03:48 · 179 阅读 · 0 评论 -
键盘 keyboard.cpp
【一句话题意】有多种操作 1、删除一个字符,代价为1 2、加入一个字符,代价为1 3、复制字符串为原来的k倍,代价为2+2*k 3、删除所有字符,代价为3 现在有初始长度为x,求到长度n最小代价。 【分析】 题目稍作简化,请无视。 显然删除所有字符只有在所有操作之前(反证法即可)。 稍作思考即可发现,dp值的大小,存在极强的后效性。所以,改成最短路求dist[x],spfa玄学复杂度再加常数优化...原创 2018-11-07 13:43:26 · 402 阅读 · 0 评论 -
序列 sequence.cpp【搜索】【剪枝】
【一句话题意】给定一个1~n 的排列x,每次你可以将x1~xi 翻转。你需要求出将序列变为升序的最小操作次数。 有多组数据。n<=25 【分析】为什么我会,看到题会一头雾水?这就对了,因为这是一道搜索题。 在baidu上浏览各个大佬的题解,核心都是估价函数+迭代加深。 迭代加深可以理解,基于估价函数,我们可知从当前状态到目标状态(有序)的最少翻转次数。显然如果当前翻转次数+估价值大于迭代限制...原创 2018-11-07 16:25:36 · 313 阅读 · 0 评论