ACM北大暑期课培训第二天
今天继续讲的动态规划 ...
补充几个要点:
1. 善于利用滚动数组(可减少内存,用法与计算方向有关)
2.升维
3.可利用一些数据结构等方法使代码更优 (比如优先队列)
4.一般看到数值小的 (十几以内的 ) 考虑 状压 / 搜索
5.状压:有时,状态相当复杂,看上去需要很多空间,比如一个数组 才能表示一个状态,那么就需要对状态进行某种编码,进行 压缩表示。 ( 比如:状态和某个集合有关,集合里可以有一些元素,没有 另一些元素,那么就可以用一个整数表示该集合,每个元素 对应于一个bit,有该元素,则该bit就是1。)
例题:3.POJ 1458 Common Subsequence
4.OpenJ_Bailian 4152 最佳加法表达式
5.OpenJ_Bailian 2755 神奇的口袋
6.POJ 3624 Charm Bracelet
7.POJ 1088 滑雪
8.POJ 1390 Blocks
9.POJ 2373 Dividing the Path
状态压缩动态规划:
10.OpenJ_Bailian 4124 海贼王之伟大航路
11.OpenJ_Bailian 4149 课程大作业
12.POJ 1185 炮兵阵地