camp day3

D题。题意:给出n个数的序列,n~2000,每个数都有一个权值,w,wi + wj 》d的话,i和j有一条边。 题目中会给出d的值~1e9. 问将这些分成两个集合,使得这两个集合之间的边最多,问最多的条数,和最多条数时候的方案数。
题解:我们先只算最多的条数。关键是理解d的限制建造出的边的使用方法。我们看 ,将w升序排序,那么前面的会有一些和n点没有建边的,可以丢掉,然后有一些只和n建边的,之后重点来了,我们缩小规模,n点最后考虑,然后只考虑j1到n-1的子问题,然后将n点放到分好的两个集合中的一个,之后把j到j1的放到和n点放的不同的集合里面。所以我们dp的时候还要多记录一个集合中的个数为x,也就是f【i】【x】,然后转移的时候有O(1)的转移。 考虑方案数的时候就是合并的时候多注意下就好。
E题。题意:给出一颗特别的树,就是只有根有很多个儿子,而之后都最多只有一个儿子,就是一条一条的链,n~10000. 现在给出n个东西,每个东西有一个限制,u到v的简单路径,要选取这个路径上一个点,并且每个点只能够分配给一个东西。求随便一种分配方案。
题解:解法一:我们观察树的特征,发现有两种链,一种是不跨过根的,一种是跨过根的,我们先考虑一个贪心问题:一条链上,也就是一维的时候可以用一个优先队列来搞。 之后,我们回到这一道题,我们从链的叶子开始贪心,先不考虑所有跨过根的链,因为他们在我们的贪心中总是最后才被考虑的,我们现在贪心是对最终是对的。 那么最后只剩下一些跨过根的链。 我们就用上了他们的lca都是一个点的条件了,建立网络流,每个链从叶子往上依次连INF有向边,汇聚到lca,而lca也到T连为1的,就是考虑好限制和转移匹配的INF的边。 然后跑就行了。
解法二:一种经典的做法,倍增,每个点有(i, j)代表i点往上到2^j个的区间,那么我们每一条链最多用4个就能覆盖,建图的边重(i,j)向(i,j-1)和(i+啥啥啥, j-1)。最后会只剩一个点来连向T。也可以用树链剖分对应到线段树上链。
F题。题意:n~400,代表n的排列,定义如果px 》 px+1,那么贡献一个x,将所有的贡献值加起来,就是这个排列的值,现在给出一个k~n方级别的,求满足这样方案数的个数。
题解:首先f【i】【k】,i指到i个数了,k指目前的答案是k,然后现在已经n三次方了,只能o(1)的转换。我们发现不会。。。。所以赛场上有人打表发现了规律,是一种做法。 后来讲题的时候,说k等价于逆序对数,那么我们假设认为这个正确,我们推一下递推式,把f【i】【k】,用i放在哪里的方法,写出来一个sigma的式,比较f【i】【k-1】,补一补就好了。 还是很好的一道题的。
J题。题意:给出n,让你用n个自己定随便每个边长的正方形拼成一个大的正方形。n~100。
题解:我们发现,n = 4,的东西,再加2也是可以的。 所以偶数都行,除了2. 我们又发现,一个正方形加3也是可以的,就是和4一样, 因此只有5不行,也就是2 3 5 不行, 1 特判 其他的都能弄。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值