T1:找规律。
一个长有a个点,宽有b个点的矩阵,以这个矩阵的格点为顶点且边平行于长或宽的长方形的个数为a*(a-1)/2*b*(b-1)/2。
我们假设题目给出的n,m满足n<=m,那么我们可以枚举放置矩阵的宽i,因为一个矩阵确定下来之后最优的方案就是沿每一列放置,那么我们可以得出一下一个放置矩阵:
*****
*****
****
我们可以通过容斥原理来计算总方案数。
T2:并查集。
由于删边很难,所以我们可以用增边的方式去做,那么这是最容易想到的方法就是并查集。要注意的是程序要打的优美点,因为要卡时间。
总结:
1、当一些问题正着做很难时,我们可以用逆向思维倒着做,这样问题或许会变得简单。正所谓正难则反。
T3:bfs+优化。
对每一个点都bfs一次,加上的优化也不难,有两点:
1、如果一个山峰的高度是最高高度,那么这个山峰一定是OK的。
2、如果一个山峰的高度小于d,这个山峰又不是最高山峰,那么这个山峰就一定是不OK的。
总结:
1、比赛时因为用了memset赋初始值,所以超时30分。为什么memset会超时呢?原因是memset比循环快一点,但不会快很多。用几次是不会超时的,但是像这道题一样用几万次就耗时很大,以后要注意慎用memset。