摘要:
状态压缩DP~~题目大意:吕布大战群雄,每位英雄都有自己的攻击力,防御力,还有hp(血量),吕布比较特殊,当他积累够100的经验值时他可以升级 。。升级的话加属性。这个比较公平一点,是单挑,每一位英雄轮流与吕布作战,当吕布杀死一个英雄后,可以得到一定的经验值,问吕布能不能杀死所有的英雄,如果可以的话,求出最后能剩余的最大血量(可以参考,打dota时比较有用的。。^_^)思路:比较裸的状态压缩DP,直接二进制转换。一般的状态转移方程就可以了。虽然把这道题A了,但是我感觉这样做缺乏正确性,参见http://acm.hdu.edu.cn/discuss/problem/post/reply.php? 阅读全文
摘要:
在hdu上随便找了一题做,没想到竟然是状态压缩DP。开始有一句话没看清楚“But Mr Acmer gets bored so easily that he doesn't want to visit a city more than twice!”,我以为每个城市只能访问一次呢,用二进制怎么搞都不对,上网上搜,都说是三进制,我很不解,这跟三进制有什么关系吗?最后又读了几遍题,把这个错误给发现了。。三进制思想和二进制一样,只不过多了一种状态,其他的都一样。题目大意:加限制的最小生成树,限制条件:每个节点最多只能到达两次。代码:View Code 1 #include<stdio. 阅读全文
摘要:
二进制 状态压缩DP。题目大意: 有n份作业需要做,每一份作业都有 一个截至时间和一个耗时(完成该作业需要的时间),每份作业每逾期一天就扣掉一分,要求完成所有作业并扣掉最少的学分,并把完成作业的顺序输出出来!很早之前就写过这道题,当时以为是道水题,直接贪心求解,一直WA,后来找到了一个反例,发现贪心真的不行,就放那了。这两天学了下状态压缩DP,把这道题给搞出来了。思路:二进制状态压缩,1表示该作业已经完成,0表示未完成,而n最大15,也就是说最多只有2^15种状态。把这2^n种状态遍历一遍就可以了,s表示其中一个状态,ans表示s的二进制有多少个1, 所以s可以由ans种方式到达,在这ans种 阅读全文