2013-09-11 09:56

W[I]代表前I天能取得的最小花费,假设在第J天更改一次路线,那么如果有

W[I]>W[J]+第j+1到第I天的最小花费+更改路线的花费(K) 那么更新W[I];

用最短路求第J+1到I的最短路*(I-J),边界则是W[1]=0;

因为最开始的路线不用更改(就是最初的路线不算在更改的费用中),这个

方程默认第一次的路线就是更改后的,多加了一次K,所以最后输出W[I]-K;

//By BLADEVIL
var
connect :array[..,..] of longint;
n, m, k, e, ch :longint;
c :array[..,..] of longint;
w :array[..] of longint;
d :array[..] of longint;
vis :array[..] of boolean; procedure init;
var
i, j :longint;
x, y, z :longint;
begin
assign(input,'santajs.in'); reset(input);
assign(output,'santajs.out'); rewrite(output);
read(n,m,k,e);
fillchar(connect,sizeof(connect),);
for i:= to e do
begin
read(x,y,z);
if z<connect[x,y] then
begin
connect[x,y]:=z;
connect[y,x]:=z;
end;
end;
read(ch);
for i:= to ch do
begin
read(x,y,z);
for j:=y to z do
begin
inc(c[j,]);
c[j,c[j,]]:=x;
end;
end;
end; function dijkstra(s,t:longint):longint;
var
i, j, max, k :longint;
begin
fillchar(vis,sizeof(vis),false);
for i:= to m do d[i]:=maxlongint;
d[]:=;
for i:=s to t do
for j:= to c[i,] do
vis[c[i,j]]:=true; for i:= to m- do
begin
max:=maxlongint;
for j:= to m do
if (not vis[j]) and (d[j]<max) then
begin
k:=j;
max:=d[j];
end;
vis[k]:=true;
for j:= to m do if d[j]>d[k]+connect[k,j] then d[j]:=d[k]+connect[k,j];
end;
exit(d[m]);
end; procedure dp;
var
i, j, x :longint;
begin
for i:= to n do
begin
w[i]:=maxlongint div ;
for j:= to i- do
begin
x:=dijkstra(j+,i);
if x> then continue;
if w[i]>w[j]+k+(i-j)*x then w[i]:=w[j]+k+(i-j)*x;
end;
end;
writeln(w[n]-k);
close(input); close(output);
end; begin
init;
dp;
end.

BZoj 1003 物流运输 DP+最短路的更多相关文章

  1. BZOJ 1003 物流运输 (dp + dijkstra)

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 8672  Solved: 3678[Submit][Stat ...

  2. BZOJ 1003 物流运输【最短路】【动态规划】

    这道题数据太小啦!先枚举i,j表示从第i天到第j天不更改航线的费用. 然后直接跑最短路算法(我用的是Q版男朋友算法) 动归方程显然是f[i] = min(f[i], f[j] + cost[j+1][ ...

  3. BZOJ 1003 物流运输 题解 【SPFA+DP】

    BZOJ 1003 物流运输 题解 Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的 ...

  4. BZOJ 1003 物流运输 (动态规划 SPFA 最短路)

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 5590 Solved: 2293 [Submit][Stat ...

  5. BZOJ 1003 物流运输trans dijstra+dp

    1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3896  Solved: 1608[Submit] ...

  6. BZOJ 1003--[ZJOI2006]物流运输(最短路)

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 10034  Solved: 4403 Description ...

  7. BZOJ 1003 - 物流运输 - [最短路+dp]

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1003 Time Limit: 10 Sec Memory Limit: 162 MB D ...

  8. BZOJ.1003.[ZJOI2006]物流运输(DP 最短路Dijkstra)

    题目链接 容易看出是个最短路+DP.既然答案和天数有关,那么就令\(f[i]\)表示前\(i\)天最小成本. 这个转移很好想: \(f[i]=\min(f[i],\ f[j]+cost(j+1,i)+ ...

  9. bzoj 1003物流运输 区间dp+spfa

    基本思路: 一开始确实没什么思路,因为觉得怎么着都会超时,然后看一下数据范围,呵,怎么都不会超时. 思路: 1.看到能改变线路,想到可以用以下区间dp,区间dp的话,先枚举长度,枚举开始位置,然后枚举 ...

随机推荐

  1. github简单使用教程(转)

    github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开.对于一般人来说公共仓库就已经足够了,而且我们也没多少代码来管理,O(∩_∩)O ...

  2. localStorage简析

    声明:引用自http://www.cnblogs.com/st-leslie/p/5617130.html 一.什么是localStorage.sessionStorage 在HTML5中,新加入了一 ...

  3. Flask Web开发从入门到放弃(一)

    第1章 章节一 01 内容概要 02 内容回顾 03 路飞学城之加入购物车 04 路飞学城之结算 05 路飞学城之立即支付 06 路飞学城之后续计划 07 Flask框架简介和快速使用 08 FLas ...

  4. 前端----css总结

    1,权重计算: 权重:id  class  标签--->>>顺序不变 当权重一样时,显示后来设置的 继承下来的标签,权重为0 若权重为0,那么谁描述的近,就显示谁 若权重为0,描述的 ...

  5. Django源码分析之执行入口

    魔法门 一般我们启动django,最简单的方法是进入project 目录,这时目录结构是这样的 然后我们执行python manage.py runserver,程序就开始执行了. 那django是如 ...

  6. Linux服务架设篇--traceroute命令

    作用: 查看数据包在传输过程中经过了哪些IP地址的路由器.网关. 工作原理: 首先向远程主机发送TTL为1的UDP数据包,按照协议规定,路由器收到数据包,TTL值减1,这时TTL就为0,路由器就会丢弃 ...

  7. LTE/EPC中,MME怎么找到UE的HSS的?

    http://bbs.c114.net/forum.php?mod=viewthread&tid=486247 HSS---归属用户服务器,我的理解:一般来说只有一个,或者是一个分布式数据库. ...

  8. Zebra - zebra command to get printer error and warning status

    1 Flag2 Nibble 16-93 Nibble 8-44 Nibble 35 Nibble 26 Nibble 1

  9. C++关于堆的函数

    建立堆 make_heap(_First, _Last, _Comp) 默认是建立最大堆的.对int类型,可以在第三个参数传入greater<int>()得到最小堆.   在堆中添加数据 ...

  10. 【python】time 和datetime类型转换,字符串型变量转成日期型变量

    s1='20120125';   6     s2='20120216';   7     a=time.strptime(s1,'%Y%m%d');   8     b=time.strptime( ...