题目链接:http://poj.org/problem?id=2288 题目: 题意:求Hamilton 路径权值的最大值,且求出有多少条权值这么大的Hamilton路径. 思路:状压dp,dp[i][j][k]表示第i种状态下倒数第二个岛屿为j倒数第一个岛屿为k下的权值,cnt[i][j][k]记录条数. 当有边(i,j)存在时,有如下初值可赋: d[(1<<i)+(1<<j)][i][j]=val[i]+val[j]+val[i]*val[j],cnt[(1<<i)…
题意: 给一个无向图,n个点m条边,每个点有点权,要求找到一条哈密顿路径,使得该路径的f(path)值最大.输出f值,若有多条最大f值的路径,输出路径数量. f值由如下3点累加而来: (1)所有点权之和. (2)路径上相邻两点的点权之积. (3)路径上如果有连续的3个点是一个三角形(即3点成环),则累加三点的点权之积. 思路: 根据f值的计算方式,第一项基本是不会变的,其他两项与路径有关.由于需要计算第3点,所以状态还需要记录每个状态的最后两个点(有序的),来判断是否为三角形.那么状态表示为[哪…
这道题千辛万苦啊! 这道题要涉及到当前点和前面两个点,那就设dp[state][i][j]为当前状态为state,当前点为i,前一个点为j 这个状态表示和之前做炮兵那题很像,就是涉及到三个点时,就多设一维表示前一个点(炮兵那题把点换成行) 这道题有很多细节需要注意 (1)计算路径长度.这道题一开始怎么不重复又方便的计算长度难住了我. 后来看到题解直接在初始化的时候算上路径,非常牛逼 然后前两个点的路径就包含进去了. 首先加上前一个点和当前点的价值 然后看有没有构成三角形,有就再加上 (2)更新答…
题意:n个点,m有向边,w[i]表示i的价值,求价值最大的哈密顿图(只经过所有点一次).价值为:所有点的w之和,加上,每条边的价值 = w[i] * w[j],加上,如果连续的三个点相互连接的价值 = w[i] * w[j] * w[k].不存在输出0 0.n <= 13. 思路:dp[state][i][j]表示state状态下,最后两个为i,j. 代码: #include<cmath> #include<set> #include<map> #include&…
http://poj.org/problem?id=2288 题意: 有n个岛屿,每个岛屿有一个权值V,一条哈密顿路径C1,C2,...Cn的值为3部分之和: 第1部分,将路径中每个岛屿的权值累加起来:第2部分,对路径中的每条边(Ci,Ci+1),将成绩Vi×Vi+1累加起来:第3部分,当路径中连续的3个岛屿Ci.Ci+1和Ci+2形成一个三角形,即在岛屿Ci和Ci+2之间有一座桥,则把乘积Vi×Vi+1×Vi+2累加起来. 寻找权值最大的哈密顿路径和其路径数. 思路: 用d[status][i…
虐狗宝典学习笔记: 取出整数\(n\)在二进制表示下的第\(k\)位                                                    \((n >> k) & 1)\) 取出整数\(n\)在二进制表示下的第\(0 ~ k - 1\)位(后\(k\)位)                    \(n & ((1 << k) - 1)\) 把整数\(n\)在二进制表示下的第\(k\)位取反                     …
最短Hamilton路径实际上就是状压dp,而且这是一道作为一个初学状压dp的我应该必做的题目 题目描述 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次. 输入 第一行一个整数n.接下来n行每行n个整数,其中第i行第j个整数表示点i到j的距离(一个不超过10^7的正整数,记为a[i,j]).对于任意的x,y,z,数据保证 a[x,x]=0,a…
题目描述 给定一张 n 个点的带权无向图,点从 0∼n−1 标号,求起点 0 到终点 n−1 的最短 Hamilton 路径. Hamilton 路径的定义是从 0 到 n−1 不重不漏地经过每个点恰好一次. 输入格式 第一行输入整数 n. 接下来 n 行每行 n 个整数,其中第 i 行第 j 个整数表示点 i 到 j 的距离(记为 a[i,j]). 对于任意的 x,y,z数据保证 a[x,x]=0,a[x,y]=a[y,x]a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[…
状压DP,依靠的是把状态用某种压缩方式表示出来进而DP,大多数时候是二进制状压. 直接看例题吧. 一双木棋     九尾狐吃棉花糖     islands and bridges 愤怒的小鸟   芯片   car  宝藏 发现一个问题... 我写的状压DP全TM是求极值的!!!没有一个是求方案数的...... 这不可...赶快补...... 广场铺砖问题   硬木地板  互不侵犯…
\(solution:\) 思路大家应该都懂: 状压DP:\(f[i][j]\),其中 \(i\) 这一维是需要状压的,用来记录19个节点每一个是否已经走过(走过为 \(1\) ,没走为 \(0\) ,用 \(2\)进制 压缩一下即可).同时,我们认为状压中已经走过的序号最小的节点为出发节点,\(j\) 即数组第二维是路径终点.(当这两个数相同时,说明找到了一个环). 注:这种方法因为无向图的存在,会出现(同一条路径出现两次)(一条边和两个端点构成非法环)的情况,这只需要在输出答案时 \(ans…