HDOJ1074~~Doing Homework解题报告

HDOJ1074~~Doing Homework解题报告
http://acm.hdu.edu.cn/showproblem.php?pid=1074

此题甚烦,煞费苦心阿。。。

一直想不出怎么DP,以前还用贪心的算法做过。。
今天看见课件里的一张图突生想法
HDOJ1074~~Doing Homework解题报告_第1张图片

可以和数塔一样自底向上DP
比如说1,2这个点,记录的是
先1后2 和先2后1的最优情况,如此重复。。。
虽说是自底向上
但是要从最顶端开始先找到最下边的,然后还要加上记忆话搜索
如果不记忆的话,上边这张图1就搜索了两次
如果作业很多的话,这重复量足以令你超时~!

接下来就要记录状态了,(1,2)(1,3)记录在起来,总不能开一个多维数组吧
这里就用到了很神奇的位压缩
把每种作业都看成1完成0未完成两种情况
题目最多15种作业,那么,用一个小于32768==2^15的数便可以完成这个记录状态的任务
那就开一个32768的数组吧

接着就可以写dfs了,考虑的东西挺多的阿,很小心翼翼的写了一个多小时
最后准备测试一下sample的时候发现竟然答案对了,我原以为sample都要调试好久
只差输出的名称
我发现是倒过来的,再开个数组存下再逆序输出就好了,提交,哈哈,AC了。。。开心
这是本菜鸟迄今做的最有意思的DP了。。哈哈

你可能感兴趣的:(HDOJ1074~~Doing Homework解题报告)