今天训练内容较易,回家后要把前两天欠下的债还还,随后,找一找以前比较经典,考思维,难打的题目,巩固一下,打扎实基础,按理来说,这些当初费了很多时间的题目不是很容易可以做出,就当重新做一道题去做吧,重新思考,如果能思考出不同的方法便是更好。
先总结一下今天的题目:
T1:
·题目大意不说
·裸算法题:克鲁斯卡尔
但今天要学习一下这个算法!巩固!
T2:
·前缀和优化,枚举i,j,再枚举(i,j)点走k步所能达到的行,再这些行里面用前缀和优化所能达到的列.
·想想其它限制??如果说取必须走K步的点应该怎么做?
·(很简单,可以把 取K步的方案数-取(k-1)步的方案数 相减即为答案)
·是否能优化?
·显然,根据走的步数对称,故我们可以在算上半部的时候直接把下半部加了
·还有优化?
·没有了
T3:简单DP
T4:规律
T5:
·最大子矩阵
·显然,如果没有负数,则整个矩阵就是最大子矩阵,那么,根据此性质,易想到:
·我们可以枚举最大子矩阵的行或列,并求通过前缀和把行或列压成一个数
·做最大和子序列即可
·最大和子序列有两种方法:
·第一种:
贪心,可以想,如果从一段开始选,和都小于0,不如不选,根据此想法可以O(n)做出,故时间复杂度为O(n³)
·第二种:
贪心,可以想,我们枚举哪一列为矩阵的右边界,那么如果没负数,则从第一列开取答案最优,而因为有负数,故我们可以把前面从第一列开始最大的一个负数子矩阵记录好,不选这个矩阵即可。