poj 2288(状态压缩dp + TSP问题)

题目描述:哈密尔顿路问题。n个点,每一个点有权值,设哈密尔顿路为 C1C2...Cn,Ci的权值为Vi,一条哈密尔顿路的值分为三部分计算:

1.每一个点的权值之和
2.对于图中的每一条CiCi+1,加上Vi*Vi+1
3.对于路径中的连续三个点:CiCi+1Ci+2,若在图中,三点构成三角形,则要加上Vi*Vi+1*Vi+2

求一条汉密尔顿路可以获得的最大值,并且还要输出有多少条这样的哈密尔顿路。


解题思路:这道题比一般的TSP问题要复杂一点,因为要考虑三个连续的点。而且还要记录路径条数。

我设了一个四维数组dp[s][i][j][k],表示状态为s,且最后三个点是i->j->k的最大值。然后状态转移方程很简单。要注意运算符的优先级问题,害死人!!!

怎么计数就不多说了,参考的网上的,不过这里四维会爆内存。。

实际上网上很多人都是三维就够了,确实没有必要知道三个点,知道两个点反正可以推出第三个点来。

参考博客:http://www.cnblogs.com/jackge/archive/2013/05/24/3096162.html

这题就不写代码了。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值