码迷,mamicode.com
首页 > 其他好文 > 详细

TSP+dp+状态压缩的本质

时间:2015-01-29 17:38:55      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

技术分享/*
dis[1][2]=1;dis[1][3]=3;dis[1][4]=6;
dis[2][3]=2;dis[2][4]=5;
dis[3][4]=3;
二进制从右往左依次代表的1-n,0代表没有经过1代表经过了,比如3化成二进制为11代表经过了1和2.
dp[i][j]代表的状态为在状态i的时候从1出发最后到达j的值
只经过一个点
dp[1][1]=0//初始化,其他的都为无穷大
只经过两个点
dp[11][2]=1;//dp[3][2]=1也就是经过两个点而且由1-2的,值为1
dp[101][3]=3;//dp[5][2]=1也就是经过两个点而且由1-3的,值为3(因为每个点可以经过无限次所以在这个时候经过了2然后到达3也看做只经过3而没有经过2)
dp[1001][4]=6;//dp[9][4]=6也就是经过了两个点而且由1-4的,值为4
只经过三个点
dp[111][3]=3;//dp[7][3]=3由dp[3][2](也就是1-2)推来,现在的状态就表示1-2-3
dp[1011][4]=6;//dp[11][4]=6由dp[3][2](也就是1-2)推来,现在的状态就表示1-2-4
dp[111][2]=5;//dp[7][2]=5由dp[5][2](也就是1-3)推来,现在的状态就表示1-3-2
dp[1101][4]=6;//dp[13][4]=5由dp[5][2](也就是1-3)推来,现在的状态就表示1-3-4
dp[1101][3]=9;//dp[13][3]=9由dp[9][4](也就是1-4)推来,现在的状态就表示1-4-3
dp[1101][2]=11;//dp[13][2]=11由dp[9][4](也就是1-4)推来,现在的状态就表示1-4-2
只经过四个点
dp[1111][4]=6;//dp[15][4]=6由dp[7][3](也就是1-2-3)推来,现在的状态就表示1-2-3-4
dp[1111][4]=10;//dp[15][3]=10由dp[11][4](也就是1-3-2)推来,现在的状态就表示1-3-2-4(由于会和1-2-3-4比较所以这一次的状态不会保留下来也就是说dp[15][4]的值为6而不为9)
dp[1111][3]=9;//dp[15][3]=9由dp[7][3](也就是1-2-4)推来,现在的状态就表示1-2-4-3
dp[1111][3]=13;//dp[15][3]=13由dp[7][2](也就是1-4-2)推来,现在的状态就表示1-4-2-3(由于会和1-2-4-3比较所以这一次的状态不会保留下来也就是说dp[15][3]的值为9而不为13)
dp[1111][2]=11;//dp[15][2]=11由dp[13][4](也就是1-3-4)推来,现在的状态就表示1-3-4-2
dp[1111][2]=11;//dp[15][2]=11由dp[13][3](也就是1-4-3)推来,现在的状态就表示1-4-3-2(由于会和1-2-3-4-3比较,所以这一次的状态包不保存都一样)
由上面可以看出:
所有的路径为
1-2-3-4
1-3-2-4
1-2-4-3
1-4-2-3
1-3-4-2
1-4-3-2
也就是枚举了所有的情况,算是另一种策略的暴力吧。
*/

TSP+dp+状态压缩的本质

标签:

原文地址:http://blog.csdn.net/u013491149/article/details/43273595

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!