从旅行商问题说起—— 给定一个图,n个节点(n<=15),求从a节点出发,经历每个节点仅一次,最后回到a,需要的最短时间. 分析: 设定状态S代表当前已经走过的城市的集合,显然,S<=(1<<n)-1. dp[k][s]——从a走到k,已经经历过的节点集合为s,按照规则走回a所需要的最短时间. 初始化:dp[k][s]=-1 int DP(int K,int S) { if (dp[K][S]!=-1) { return dp[K][S]; } if (K==a &&…
 1.小技巧 枚举集合S的子集:for(int i = S; i > 0; i=(i-1)&S) 枚举包含S的集合:for(int i = S; i < (1<<n); i = (i+1)|S) 2.训练题目 1.HDU 4628 Pieces http://acm.hdu.edu.cn/showproblem.php?pid=4628 题意: 给定一个(len<=16)的串,每次可删除一个回文子序列,问最少需要几次删完整个串 思路:简单状态压缩   dp[s]=mi…
浅谈状态压缩DP 本篇随笔简单讲解一下信息学奥林匹克竞赛中的状态压缩动态规划相关知识点.在算法竞赛中,状压\(DP\)是非常常见的动规类型.不仅如此,不仅是状压\(DP\),状压还是很多其他题目的处理技巧.所以掌握状压.掌握状压DP是十分重要的. 注:虽然自己写的也是状压DP的讲解.但还是凭良心推荐机房大佬@littleseven的状压博客,讲的真的是太详细了.强烈推荐! 链接Link: 浅谈状压DP 状态压缩的概念 来看一个问题. 相信大家都做过动态规划的背包问题,那么我们再来看一个跟背包很像…
// 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前言        动态规划,永远的痛.        好了不扯远了.状态压缩动态规划,其实看名字还是较好理解的.我们在动态规划的时候,最重要的就在于状态的设计和状态转移方程.那么,如果当我们状态过多导致时间或空间不够的饿时候,就可以用到状态压缩.王队(@wyh2000)说状态压缩DP难起来的话会很难…
描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,--,L(其中L是桥的长度).坐标为0的点表示桥的起点,坐标为L的点表示桥的终点.青蛙从桥的起点开始,不停的向终点方向跳跃.一次跳跃的距离是S到T之间的任意正整数(包括S,T).当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥. 题目给出独木桥的长度L,青蛙跳跃的距离范围…
描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市——那座城市即将举行美食节! 但是不幸的是,小Hi和小Ho并没有能够买到很好的火车票——他们只能够乘坐最为破旧的火车进行他们的旅程. 不仅如此,因为美食节的吸引,许多人纷纷踏上了和小Hi小Ho一样的旅程,于是有相当多的人遭遇到了和小Hi小Ho一样的情况——这导致这辆车上的人非常非常的多,以至于都没有足够的位置能让每一个人都有地方坐下来. 小Hi和小Ho本着礼让他们的心情——当然还因为本…
状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴. 为了更好的理解状压dp,首先介绍位运算相关的知识. 1.’&’符号,x&y,会将两个十进制数在二进制下进行与运算,然后返回其十进制下的值.例如3(11)&2(10)=2(10). 2.’|’符号,x|y,会将两个十进制数在二进制下进行或运算,然后返回其十进制下的值.例如3(11)|2(10)=3(11). 3.’^’符号,x^y…
问题简介 有n个城市,每个城市间均有道路,一个推销员要从某个城市出发,到其余的n-1个城市一次且仅且一次,然后回到再回到出发点.问销售员应如何经过这些城市是他所走的路线最短? 用图论的语言描述就是:给定一个权值为正数的赋权完全图,求各边权值和最小的哈密尔顿回路. 这个问题就是著名的旅行商问题(TSP,Traveling Salesman Problem),TSP问题是NP问题,没有已知的多项式时间的高效算法可以解决之一问题.问题在1930年首次被形式化,并且是在最优化中研究最深入的问题之一,许多…
明天计划上是要刷状压,但是作为现在还不会状压的\(ruoruo\)来说是一件非常苦逼的事情,所以提前学了一下状压\(dp\). 鸣谢\(hmq\ juju\)的友情帮助 状态压缩动态规划 本博文的大体内容说明 因为刚学习状态压缩,并且刚做完一道例题.写博客的主要目的是怕自己忘掉,免得以后再重新学习一遍.而那些来踩我博客的同志们,希望以辩证的眼光来看待这篇博文. 于是这篇博客就讲\(Corn Fields\)这一道例题.所以阅读以下内容之前请先浏览一下题目. 基本原理 状态压缩\(dp\)主要是在…
状态压缩DP是什么? 答:利用位运算(位运算比加减乘除都快!)来记录状态,并实现动态规划. 适用于什么问题? 答:数据规模较小:不能使用简单的算法解决. 例题: 题目描述 糖果店的老板一共有M 种口味的糖果出售.为了方便描述,我们将M种口味编号1~M.小明希望能品尝到所有口味的糖果.遗憾的是老板并不单独出售糖果,而是K颗一包整包出售.幸好糖果包装上注明了其中K 颗糖果的口味,所以小明可以在买之前就知道每包内的糖果口味.给定N 包糖果,请你计算小明最少买几包,就可以品尝到所有口味的糖果. 输入 第…