题目描述

物流公司要把一批货物从码头A运到码头B。由于货物量比较大,需要n天才能运完。货物运输过程中一般要转停好几个码头。物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪。由于各种因素的存在,有的时候某个码头会无法装卸货物。这时候就必须修改运输路线,让货物能够按时到达目的地。但是修改路线是—件十分麻烦的事情,会带来额外的成本。因此物流公司希望能够订一个n天的运输计划,使得总成本尽可能地小。

输入输出格式

输入格式:

第一行是四个整数n(l≤n≤100)、m(l≤m≤20)、K和e。n表示货物运输所需天数,m表示码头总数,K表示每次修改运输路线所需成本,e表示航线条数。接下来e行每行是一条航线描述,包括了三个整数,依次表示航线连接的两个码头编号以及航线长度(>0)。其中码头A编号为1,码头B编号为m。单位长度的运输费用为1。航线是双向的。再接下来一行是一个整数d,后面的d行每行是三个整数P(1<P<m),a,b(1≤a≤b≤n)。表示编号为P的码头从第a天到第b天无法装卸货物(含头尾)。同一个码头有可能在多个时间段内不可用。但任何时间都存在至少一条从码头A到码头B的运输路线。

输出格式:

包括了一个整数表示最小的总成本。总成本=n天运输路线长度之和+K*改变运输路线的次数。

输入输出样例

输入样例#1:  复制

  5 5 10 81 2 11 3 31 4 22 3 22 4 43 4 13 5 24 5 242 2 33 1 13 3 34 4 5

输出样例#1:  复制

32

说明

【样例输入说明】

上图依次表示第1至第5天的情况,阴影表示不可用的码头。

【样例输出说明】

前三天走1-4-5,后两天走1-3-5,这样总成本为(2+2)*3+(3+2)*2+10=32。

_NOI导刊2010提高(01)

考虑dp,dp[i]表示前i天所需的最小花费,转移方程:

dp[i]=min{dp[j]+sum[j+1][i]*(i-j)+K) (j<i)

表示在第j天改路线,sum[j+1][i]表示从满足从第j+1天到第i天的限制条件的最短路径,预处理sum数组即可。

#include<iostream>
#include<cstring>
#include<algorithm>
#define f(i,l,r) for(i=(l);i<=(r);i++)
using namespace std;
const int MAXN=105,MAXM=25,INF=1000000000;
struct Edge{int v,w,next;
}e[MAXM*MAXM];
int head[MAXN],tot;
int n,m,K,E,d,P,l,r,day[MAXN];
int dis[MAXN],vis[MAXN];
int sta;
int sum[MAXN][MAXN];
int heap[2][MAXN],sz;
int dp[MAXN];
inline void add(int u,int v,int w)
{e[tot].v=v;e[tot].w=w;e[tot].next=head[u];head[u]=tot++;
}
inline void pushup(int p)
{int fa=p>>1,a=heap[0][p],id=heap[1][p];while(fa&&heap[0][fa]>a){heap[0][p]=heap[0][fa];heap[1][p]=heap[1][fa];p=fa;fa>>=1;}heap[0][p]=a;heap[1][p]=id;
}
inline void pushdown(int p)
{int son=p<<1,a=heap[0][p],id=heap[1][p];while(son<=sz){if(son<sz&&heap[0][son]>heap[1][son+1]) son++;if(heap[0][son]>=a) break;heap[0][p]=heap[0][son];heap[1][p]=heap[1][son];p=son;son<<=1;}heap[0][p]=a;heap[1][p]=id;
}
inline void insert(int a,int id)
{heap[0][++sz]=a;heap[1][sz]=id;pushup(sz);
}
inline void Pop()
{heap[0][1]=heap[0][sz];heap[1][1]=heap[1][sz--];if(sz) pushdown(1);
}
inline void Dijkstra(int l,int r)
{int i;memset(dis,60,sizeof(dis));memset(vis,0,sizeof(vis));dis[1]=0;insert(0,1);while(sz){int u=heap[1][1];Pop();if(vis[u]) continue;vis[u]=1;for(i=head[u];~i;i=e[i].next){int v=e[i].v;if((sta>>(v-1))&1) continue;if(dis[v]>dis[u]+e[i].w){dis[v]=dis[u]+e[i].w;insert(dis[v],v);}}}
}
int main()
{ios::sync_with_stdio(false);memset(head,-1,sizeof(head));int i,j,k,u,v,w;cin>>n>>m>>K>>E;f(i,1,E){cin>>u>>v>>w;add(u,v,w);add(v,u,w);}cin>>d;f(i,1,d){cin>>P>>l>>r;f(j,l,r){day[j]|=(1<<(P-1));}}f(i,1,n){sta=0;f(j,i,n){sta|=day[j];Dijkstra(i,j);sum[i][j]=dis[m];if(sum[i][j]>INF){f(k,j+1,n) sum[i][k]=INF;break;}}}f(i,1,n){if(sum[1][i]<INF)  dp[i]=sum[1][i]*i;else                dp[i]=INF;f(j,1,i-1){if(sum[j+1][i]>=INF) continue;dp[i]=min(dp[i],dp[j]+sum[j+1][i]*(i-j)+K);}}cout<<dp[n]<<endl; return 0;
}

物流运输 洛谷p1772相关推荐

  1. 【洛谷 - P1772 】[ZJOI2006]物流运输(dp)

    题干: 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理 ...

  2. 洛谷 P1772 [ZJOI2006]物流运输

    题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...

  3. 【洛谷 P1772】 [ZJOI2006]物流运输(Spfa,dp)

    题目链接 \(g[i][j]\)表示不走在\(i\text{~}j\)时间段中会关闭的港口(哪怕只关\(1\)天)从\(1\)到\(m\)的最短路. \(f[i]\)表示前\(i\)天的最小花费.于是 ...

  4. [最大生成树Kruskal/倍增LCA] 火车运输 洛谷P1967

    题目描述 AA 国有 nn 座城市,编号从 11 到 nn ,城市之间有 mm 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重 ...

  5. 【杂题总汇】NOIP2013(洛谷P1967) 货车运输

    [洛谷P1967] 货车运输 重做NOIP提高组ing... +传送门-洛谷P1967+ ◇ 题目(copy from 洛谷) 题目描述 A国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道 ...

  6. 【题解】【洛谷 P1967】 货车运输

    目录 洛谷 P1967 货车运输 原题 题解 思路 代码 洛谷 P1967 货车运输 原题 题面请查看洛谷 P1967 货车运输. 题解 思路 根据题面,假设我们有一个普通的图: 作图工具:Graph ...

  7. P1772 [ZJOI2006]物流运输(线性dp+最短路径)

    P1772 [ZJOI2006]物流运输 题意 [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头 A 运到码头 B.由于货物量比较大,需要 nnn 天才能运完.货物运输过程中一般要转 ...

  8. 洛谷P3237 [HNOI2014]米特运输 题解

    洛谷P3237 [HNOI2014]米特运输 题解 题目链接:P3237 [HNOI2014]米特运输 题意: 这题面是真的长啊 qwq 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为 ...

  9. 洛谷-运输(P2094)

    题目链接: 运输问题 问题分析: 初读题目,可能有点搞不懂.题目要求:二当一(两件的价格算一件),并且给出了这个价格是如何计算的.题目的关键点在:如此反复.直到只收一件商品的钱. 分析到这,是否感觉有 ...

最新文章

  1. weblogic 负载均衡搭建
  2. strlen和mb_strlen的区别
  3. 如何在命令行中使用jq将JSON转换为CSV
  4. MyBatisPlus_删除篇_入门试炼_04
  5. 结对编程,到底是双剑合璧还是脚趾抠地?
  6. guid linux 识别的分区表_Linux开机流程详解:BIOSgt;MBRgt;GRUBgt;Kernel
  7. 近世代数-群论基础一
  8. springcloud视频教程
  9. 黑鲨3怎么安装鸿蒙系统,黑鲨u盘重装系统步骤
  10. 主板后置音频接口图解_全程图解:手把手教你主板各种插针接口与机箱的接法_通信数码...
  11. 网络计算机干啥用,路由器干什么用?路由器功能详解【图文】
  12. 华为云notebook在线解压压缩包问题
  13. 一本书读懂大数据时代
  14. DGV:人类基因组结构变异数据库
  15. 10月10日~10月17 产品资讯
  16. C++中经典的垃圾回收算法
  17. R语言—方差分析和多重比较
  18. 浅谈成功运营12年的传奇2D游戏DNF(地下城与勇士)
  19. 大数据平台安装部署(适用虚拟机级真实服务器,亲测)
  20. 揭开均线系统的神秘面纱_揭开依赖注入的神秘面纱,并通过此快速介绍了解它的实际应用...

热门文章

  1. Appium-System Bars(系统状态栏)
  2. Soot(一):Soot的三种使用方式:命令行、idea、eclipse
  3. 大龄码农是如何把自己逼死的
  4. kb4524157安装失败_微软称Win10安装KB3081440可解决更新KB3081424失败问题
  5. cocos龙骨插件杂记
  6. 笔记本 or 台式机?给你选台式机的理由!
  7. c++打怪小游戏——修仙之路1.0
  8. Windows访问Ubuntu远程桌面
  9. Spring5学习总结这一篇就够了
  10. 基于uniapp的活动报名系统源码