好久没有单独开贴写解题报告了,这是昨天队里DIY的一道题。题意是给一颗树,问最少在多少个根节点上放上哨兵能监视整棵树。
无非就是枚举根节点,选择放还是不放。
dp[root][0]表示root节点不放哨兵,则root->v上都要放上哨兵。dp[root][0] = sum(dp[root->v][1]);
dp[root][1]表示root节点放哨兵,则root->v节点上取放或者不放的最小值,dp[root][1] = sum(min(dp[root->v][0], dp[root->v][1]));
ps:当时纠结在无向图上了,找不到根节点,所以也就没敢继续想。其实只需要建有向图就可以,转移方程里边已经把无向边这种情况包括了。找如度为0的点作为整棵数的root节点,然后记忆华搜索。。。确实是一道很水的树形dp,还没搞出来,被队长鄙视了。。。被大家鄙视了。。。T_T。看来dp之流确实有经验之谈,多积累吧。。。