摘要: 题意:有N个城市M条路相连,有两种收费方式,一种是在城市Ci时收费为Pi,另一种是在城市Bi中Ri,求从城市1到城市N的最小花费。其中Pi要小于Ri。思路:其实我觉得这就是一道变形的最短路问题,虽然是用的深搜,但原理是一样的。首先将于城市Ai相连的城市都存起来,然后用一个数组记录城市I是否被访问过,如果访问过,当然可以直接在城市I缴费,原以为每个点访问一次就行了,可是后来想一想,不是这样的,要是这样的就没法提前在Ci城市缴费了,后来在网上看到有人是“闸数”,也就是一个点最多不会被访问超过3次,否则就退出,然后就按这个方法来做的~代码:View Code #include <stdio.h 阅读全文
posted @ 2012-08-08 19:59 Misty_1 阅读(165) 评论(0) 推荐(0)
摘要: 先说一下我了解的压缩状态dp吧。经典的压缩dp问题是TSP问题:一个n个点的带权的有向图,求一条路径,使得这条路经过每个点恰好一次,并且路径上边的权值和最小(或者最大)。或者求一条具有这样性质的回路。压缩dp问题中存储点集是利用二进制形式,比如 3 = 0000,0000,0000,0011 表示第一个和第二个点在点集中,5 = 0000,0000,0000,0101 表示第一个和第三个点在点集中,以此类推。呃,简单来说,就是用一个数表示一种状态,一般n<= 16 或n <= 32 。状态转移:如果状态存在,dp[i][j] = 0 ,否则为无穷大.1、状态存在:dp[i][j] 阅读全文
posted @ 2012-08-08 11:31 Misty_1 阅读(282) 评论(0) 推荐(0)