- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
约束条件 输入 第一行为一个正整数n(0≤n≤10),表示有n组测试数据。 每组的第一行有四个正整数s,t,A,B。 s(0<S≤100)表示城市的个数,t表示飞机单位里程的价格,A,B分别为城市A,B的序号,(1≤A,B≤S)。 接下来有s行,其中第i行均有7个正整数xi1,yi1,xi2,yi2,xi3,yi3,Ti,这当中的(xi1,yi1-),(xi2,yi2),(xi3,yi3)分别是第I个城市中任意三个机场的坐标,Ti为第i个城市高速铁路单位里程的价格。 输出 共有n行,每行一个数据对应测试数据。 分析 1、计算两点间的欧氏距离 2、计算每个机场的坐标序列 3、使用Dijkstra算法计算最小费用 SSSP:权非负的情形 求1到所有点的距离 d[1] = 0 d[2] = 3, d[4] = 4 d[2] = 3. 为什么? 每次固定d的最小值 标号设定! 怎样取最小值?堆! 名称:dijkstra 和Prim算法很类似 Prim: 边最小值 dijkstra: d最小值 中间结果:最短路树! 时间复杂度O((m+n)logm) 一个例子 给出一个带权无向图G 边权为1…1 000的整数 对于v0到v1的任意一条简单路p 定义s(p)为p上所有边权的最大公约数 考虑v0到v1的所有路p1,p2,… 求所有s(p1),s(p2),…的最小公倍数 模型?最短路? 路径长度定义不再是权和,而是… dijkstra算法还能用吗? SSSP:权任意的情形 最短路有可能不存在! 什么时候不存在? 有负圈! 标号设定?标号修正 仍然有标号d[i] = k 但是标号d[i]无法固定,只能不断更新 新算法 如有最短路,则每个顶点最多经过一次 即:这条路不超过n-1条边 迭代!依次考虑1,2,3…n-1条边的情形 SSSP:bellman-ford算法 依次考虑边长度不超过1,2…n-1的路 考虑长度不超过1,2,3…k-1的路后,标号为d[] 长度为k的路可以由不超过1,2,…k-1的路增加一条边得到: for k:=1 to n-1 do for 每条边(u,v) do if (d[u]∞) and (d[v]d[u]+w(u,v)) then d[v]:=d[u]+w(u,v) 核心:标号修正过程(松弛操作) 时间复杂度:O(nm) 改进的终止条件:d都不改变 加速:用dijkstra得到初始d[] 一个例子 24小时营业的超市 需要一批出纳员来满足它的需求 每天的不同时段需要不同数目的出纳员 例如:午夜时只需一小批,而下午则需要很多) 经理已经提供你 一天里每一小时需要出纳员的最少数量——R(0), R(1), …, R(23)。 R(0)表示从午夜到午夜1:00需要出纳员的最少数目, R(1)表示上午1:00到2:00之间需要的… 每一天,这些数据都是相同的。 有N人申请这项工作 每个申请者i在每天24小时中,从一特定的时刻开始连续工作恰好8小时 定义ti(0≤ti≤23)为上面提到的开始时刻 也就是说,如果第i个申请者被录用,他将从ti刻开始连续工作8小时。 计算为满足上述限制需要雇佣的最少出纳员数目 在每一时刻可以有比对应的R(i)更多的出纳员在工作。 分析 前i(0=i=23)小时的雇佣总数:s[i] 规定s[-1] = 0 第i(0=i=23)小时需要的出纳员:r[i] 第i(0=i=23)小时申请的人数:t[i] 则有不等式 0 = s[i] – s[i-1] = t[i] s[23] – s[-1] = sum 取(i,j)满足i = (j+8) mod 24,则 i j时 s[i] – s[j] = r[i] I j时 s[i] – s[j] = r[i] – sum sum已知道时构图G(-1,0,1,…23) S[a] – s[b] = c:有向边(b, a, c) -1为起点的单源最长路 最长路存在且s[23] = sum,有解 枚举sum!二分? APSP: 基本分析 设d[i,j,k]是 在只允许经过结点[1…k]的情况下 i到j的最短路长度 则它有两种情况(想一想,为什么): 如果最短路经过点k,那么 d[i,j,k]应该等于d[i,k,k-1]+d[k,j,k-1]; 如果最短路不经过点k,那么 d[i,j,k]应该等于d[i,j,k-1]。 综合起来 d[i,j,k]=min{d[i,k,k-1]+d[k,j,k-1],d[i,j,k-1]} 边界条件是d[i,j,0]=w(i,j)(不存在的边权为∞) floyd-warshall算法 基本的动态规划 把k放外层循环,可以节省内存 对于每个k,计算每两点的目前最短路 for k:=1 to n
文档评论(0)