1.要经常数学推导,将不好维护的数据转化成便于维护的数值,同时不影响答案的正确性!!!
2.dp答案一定正确,但是过程不一定正确;在设计dp时也可以设计这种dp保证答案的正确性
3.虚拟原点,虚拟终点,虚拟根节点(将本互不相关的点/树拼接到一起,便于进行树形dp)
4.有依赖的背包问题可以转换成分组背包,u为节点,对子树进行二进制表示,每一个二进制之间互斥,极为分组背包,但pow(2,k)太大,O(N**V)优化为(N*V*V);
但对于V大而k小的情况,即可这样求解,如金明的预算方案,k最大为2,但V极大,故采用这种方式;
5.递归建树
6.答案导向,为了答案而定义dp状态以及维护的值
为了答案而选择算法,数据结构
而与求解答案无关的步骤/状态无需记录