欢迎光临散文网 会员登陆 & 注册

复盘|第299场周赛

2022-12-19 20:30 作者:UCLmsc  | 我要投稿

判断矩阵是否是一个 X 矩阵

【遍历】主对角线上的下标需满足:i = j。反对角线上的下标需满足:i + j = n - 1。

统计放置房子的方式数

【线性 DP】两侧放置方案数独立。定义f[i]表示前i个地块的放置方案数,其中第i个地块可放可不放,如果不放,那么i-1也放可不放,f[i] = f[i - 1];若放,那么i-1不能放,i - 2可放可不放,综上,f [i] = f[i - 1] + f[i - 2]。

拼接数组的最大分数

【DP】设交换[l,r]范围内的元素,Σnums1' = Σnums1 - (nums1[l] + .. + num1[r]) + (nums2[l] + .. + nums[r]),合并相同下标,等号右侧变形为Σnums1 + (nums2[l] - nums1[l]) + .. + (nums2[r] - nums1[r]),设diff[i] = nums2[i] - nums1[i],上式变为sum(nums1) + diff[l] + ... + diff[r]。至此,转换为最大子数组和问题,即求diff数组的最大子数组和,最后nums1,nums2各求一遍取max.

从树中删除边的最小分数

【DFS 时间戳】DFS 一棵树的过程中,维护一个全局的时间戳 clock,每访问一个新的节点,就将clock 加一(用时间戳代替直接判断父子节点的好处是:不用记录父子关系和祖父关系,省内存)。同时,记录进入节点 x时的时间戳in[x],和离开(递归结束)这个节点时的时间戳out[x]。由于 n 比较小,用 O(n^2)的时间枚举两条边x1-y1,x2-y2,共有三种情况:①删除的两条边在同一颗子树内,且 y1 是 x2 的祖先节点(或重合);②删除的两条边在同一颗子树内,且 y2 是 x1 的祖先节点(或重合);③删除的两条边分别属于两颗不相交的子树。


复盘|第299场周赛的评论 (共 条)

分享到微博请遵守国家法律