随笔分类 -  DP 状态压缩

摘要:题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1565 题目意思就是说给出一个n*n的棋盘,每个位置上有一个非负整数,在上面取不相邻的若干个数,使得和最大。 解法:位运算+dp 因为每行可以取的位置都是一样的,只要两个数不相邻即可。所以可以先对1<<n以内处理,筛除不合法的,优化效率,然后对每行的每一个状态,在上一行合法而且跟本状态不冲突的所有状态中找一个和最大的。本行的本状态的值就是这一行在这个状态下取得的所有数的和+这个最大值。如果是第一行,则上一行的最大值为0; 需要注意的一个地方就是n可能为0,(>_<)我看了d 阅读全文
posted @ 2011-08-24 09:33 like@neu 阅读(289) 评论(0) 推荐(0)
摘要:题目出处:http://acm.hdu.edu.cn/showproblem.php?pid=1074 dp状态压缩入门题,大牛无视。解法dp+状态压缩。参考hh大牛的这个图,http://www.cppblog.com/notonlysuccess/archive/2009/02/18/74168.aspx便于理解。题目的数据规模是15,本来采用了枚举和深搜的方法竟然都超时了。按理说不该吧。对状态压缩一无所知,参考了大牛们得解题报告,基本上是一样画葫芦写出来的。 对[1,1<<n)枚举每个值,当成是一个状态,保存到达这个状态也就是完成这个状态的作业被扣掉的最小学分。比如7的二进制 阅读全文
posted @ 2011-08-21 21:41 like@neu 阅读(339) 评论(0) 推荐(0)