摘要:
题目链接:http://poj.org/problem?id=3328思路:这道题花了我将近3个小时,结果发现是方向搞错了,orz,过了样例之后提交wa,然后换成优先队列就过了.其实题目意思很简单,就是说一个人从S点起跳,如果先前是左脚(右脚)着地,那么之后只能往某一个特定的区域跳,而经过仔细观察之后可以发现,这块区域可以统一来表示,这样的话就相当于是一个二维平面上的最短路了,只不过是多源多终点,然后我们用一个状态来标记当前的位置以及走的时间和跳的方向,由于使用了优先队列,则找到第一个终点就直接返回就行了。http://paste.ubuntu.com/5922030/ 阅读全文
摘要:
题目链接:http://poj.org/problem?id=3311思路:Floyd + 状态压缩DP 题意是有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且距离最短 (可重复走).首先不难想到用FLOYD先求出任意2点的距离dis[i][j] 。接着枚举所有状态,用11位二进制表示10个城市和pizza店,1表示经过,0表示没有经过 。定义状态DP(S,i)表示在S状态下,到达城市I的最优值 。接着状态转移方程:DP(S,i) = min{DP(S^(1<<i-1),k) + dis[k][i],DP(S,i)},器重S^(1<< 阅读全文
摘要:
题目链接:http://poj.org/bbs?problem_id=3255思路:分别以源点1和终点N为源点,两次SPFA求得dist1[i](1到各点的最短距离)以及dist2[i](各点到N的最短距离),然后就是枚举边了,设某一条边的两端为u,v,权值为w,则dist1[u]+w+dist2[v]即为1->N的一条路径,在所有的路径中找出次短的即可。http://paste.ubuntu.com/5920862/ 阅读全文
摘要:
题目链接:http://poj.org/problem?id=3072一涉及稍微计算几何方面的东西就要做好久,一开始先用SPFA写的,可能是由于松弛次数过多导致精度损失,郁闷了好久,然后改成Dijkstra就没什么问题了。http://paste.ubuntu.com/5920764/ 阅读全文