4.3听课笔记(dp篇)

陈锋老师讲的要点:

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超出这个范围,那么你的程序就会崩掉。

猜你喜欢

转载自www.cnblogs.com/hhlys/p/12625858.html