摘要: 小凯的疑惑升级版的升级版。答案若存在不会超过30002-3000,暴力dp似乎勉强可以过。当然这不优美。 注意到如果能拼出长度为l的围栏,就一定能拼出长度为l+kx的围栏,其中x为最短的(或任意一个)围栏长度。这样将值域范围缩小到了3000以内。于是将同余类间连长为木料长度的边,求出0为源点到每个点 阅读全文
posted @ 2018-10-28 23:00 Gloid 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 小凯的疑惑升级版。只有两个数的话不能表示的最大数是ab-a-b,显然如果可选数增加不会比这更大,所以只要答案存在一定小于256*256-2*256。在这个范围内背包即可。 阅读全文
posted @ 2018-10-28 20:59 Gloid 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 看上去很难维护,考虑找一些必要条件。首先显然最大值-最小值=k*(r-l)。然后区间内的数需要模k同余。最后区间内的数两两不同(k=0除外)。冷静一下可以发现这些条件组合起来就是充分的了。 考虑怎么维护。最大值最小值非常简单。模k同余相当于区间内相邻两数的差都是k的倍数,可以维护差分数组的gcd。两 阅读全文
posted @ 2018-10-28 20:23 Gloid 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 显然最优策略是先走到一边要到达的最远城市,再换方向走到另一边要到达的最远城市(当然也可以直接停止),路上参观景点。 先仅考虑求出只向左走,花费时间i时的最优解。如果能求出这个,类似的就可以求出所有情况。 显然时间越长,应该往左边走的越远,参观的越多,但是这个最远城市的变化不一定连续,没法愉快地双指针 阅读全文
posted @ 2018-10-28 17:02 Gloid 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 首先dp出长度为i的不下降子序列个数,显然这可以树状数组做到O(n2logn)。 考虑最后剩下的序列是什么,如果不管是否合法只是将序列删至只剩i个数,那么方案数显然是f[i]*(n-i)!。如果不合法,说明这个序列是由一个长度为i+1的非降序列删除一个数得来的,所以将其减去f[i+1]*(i+1)* 阅读全文
posted @ 2018-10-28 11:44 Gloid 阅读(266) 评论(0) 推荐(0) 编辑