插头dp
卡了一个星期插头dp……
终于还是卡过去了……算是吧233
插头dp简单地说就是对路径进行状态压缩,记录当前的分段路径……
首推肯定还是《基于连通性状态压缩的动态规划问题》,真心做得很好:
看完就没啥问题了……实在看不下去的话……
状态表示:0:无插头 1: “(”,即该联通块的左端点 2:“)”,即该联通块的右端点
轮廓线:已处理和未处理节点的分界线,事实上我们是从左到右,上到下的顺序处理,那么轮廓线也很容易转移(注意换行时要移位)
合并操作:提取当前扩展点的左和上位置的插头:
对于00状态,可拓展出12状态,如果题目不要求走遍所有点则可以拓展出00状态。
对于01,10,02,20状态,可以延续当前联通分量,既可以向下,也可以向右。
对于12状态,如果要求单回路,则只有当扩展到结束点时更新答案即可,否则可拓展出00状态, 即使当前联通分量闭合。
对于21状态:合并两个联通分量,由于分管左右节点,直接置为00就好了。
对于11或22状态:比较麻烦,需要合并后需要更新两个分量的另外两个端点,置为1和2,一般预处理出拓展方案。
如果有障碍,一开始末节点位置也是需要处理一下的……
就这么多了吧,写出个模板来遇到题目微调就好了……
然后就是题目了:
vijos 1110 小胖邮递员
终于还是卡过去了……算是吧233
插头dp简单地说就是对路径进行状态压缩,记录当前的分段路径……
首推肯定还是《基于连通性状态压缩的动态规划问题》,真心做得很好:
看完就没啥问题了……实在看不下去的话……
状态表示:0:无插头 1: “(”,即该联通块的左端点 2:“)”,即该联通块的右端点
轮廓线:已处理和未处理节点的分界线,事实上我们是从左到右,上到下的顺序处理,那么轮廓线也很容易转移(注意换行时要移位)
合并操作:提取当前扩展点的左和上位置的插头:
对于00状态,可拓展出12状态,如果题目不要求走遍所有点则可以拓展出00状态。
对于01,10,02,20状态,可以延续当前联通分量,既可以向下,也可以向右。
对于12状态,如果要求单回路,则只有当扩展到结束点时更新答案即可,否则可拓展出00状态, 即使当前联通分量闭合。
对于21状态:合并两个联通分量,由于分管左右节点,直接置为00就好了。
对于11或22状态:比较麻烦,需要合并后需要更新两个分量的另外两个端点,置为1和2,一般预处理出拓展方案。
如果有障碍,一开始末节点位置也是需要处理一下的……
就这么多了吧,写出个模板来遇到题目微调就好了……
然后就是题目了:
vijos 1110 小胖邮递员
不带障碍……基础“模板”题。
代码写得挫,慢得很,懒得压常数。
HDU 1739 Plan
左上角走到右下角,不得重复经过格子,也可以不经过,求最大分数。
两种方法,第一是上下加两行,加两列,加障碍,使题目变成简单的回路,而不是单路。
第二在起点终点都加一个单插头处理,其他地方也应相应微调,不过我好像调得不好,一直WA……233,不过本机测了数百组数据都是对哒,所以不管了……
调了最久的一道题:
代码写得挫,慢得很,懒得压常数。
HDU 1739 Plan
左上角走到右下角,不得重复经过格子,也可以不经过,求最大分数。
两种方法,第一是上下加两行,加两列,加障碍,使题目变成简单的回路,而不是单路。
第二在起点终点都加一个单插头处理,其他地方也应相应微调,不过我好像调得不好,一直WA……233,不过本机测了数百组数据都是对哒,所以不管了……
调了最久的一道题: