陈锋老师讲的要点:
1.搞竞赛不是为了刷题,是为了提升你的思维方法以及能力;
2.刷题的正确方法是合上书,过一个星期,这个题目还能写出来,并且看看周围同学的代码,有没有更快的,让自己的代码变得更快更好。
3.dp分为递推和记忆化,但是记忆化较优,有些问题只能使用记忆化,而不能够使用递推,因此可以看看记忆化(如数位dp)
4.在处理很多数组的问题的时候,一定要学会用引用变量,如:
int &d=D[i][j];
这个样子可以方便改变d这个变量。
5.在dp使用vis[i][j]数组的时候,开bool变量有助于节省空间。(bitset<500>这样的也能当数组用,且它比int小32倍,更小)
6.在dp中要记录路径时,可以创建一个vector<int> &path,每次push_back一个路径。
7.工作中不要开全局变量:如果是多线程的程序的话,有可能你这个全局变量同时被两个函数在改变,这样你这个全局变量的状态就是乱的,所以不要开全局变量(然而本蒟蒻看到很多竞赛dalao都在用全局变量QAQ)
8.memset是按字节赋值的,因此memset不如fill_n来的快。
9.dp有填表法以及刷表法。前一种是“对每个状态i,找到f(i)依赖的所有状态”,但是这种在有些状况下并不方便。另一种则是“对每个状态i,更新f(i)所影响到的每个状态”。
10.在查错的时候,可以为了保护程序,增加一条类似下面的代码:
assert(0<=h&&h<3);
这个样子,如果你的h超出这个范围,那么你的程序就会崩掉。