【BZOJ1003】物流运输

1003: [ZJOI2006]物流运输

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 8273  Solved: 3481
[Submit][Status][Discuss]

Description

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

Input

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

Output

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

Sample Input

5 5 10 8
1 2 1
1 3 3
1 4 2
2 3 2
2 4 4
3 4 1
3 5 2
4 5 2
4
2 2 3
3 1 1
3 3 3
4 4 5

Sample Output

32
//前三天走1-4-5,后两天走1-3-5,这样总成本为(2+2)*3+(3+2)*2+10=32
题解:预处理出第i-j天的最少花费cost[i,j],即第i-j天能连续走的最短路,这样我们做n^2遍spfa,然后直接dp即可。
初始化;f[i]=cost[1,i]
状态转移方程:f[i]=min(f[i],f[j]+cost[j+1,i])
代码如下:
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #define Max 10010
 5 #define INF 2139062143
 6 using namespace std;
 7 int n,m,K,E,d,dis[25],cost[105][105],f[105],q[25];
 8 int head[Max],cnt;
 9 bool vis[25],no[25][105],flag[25];
10 struct edge{int to,next,v;}e[Max];
11 void ins(int u,int v,int w){
12     e[++cnt].to=v;e[cnt].next=head[u];head[u]=cnt;e[cnt].v=w;
13     e[++cnt].to=u;e[cnt].next=head[v];head[v]=cnt;e[cnt].v=w;
14 }
15 int spfa(){
16     memset(dis,127,sizeof(dis)); dis[1]=0;
17     memset(vis,0,sizeof(vis)); vis[1]=true;
18     int hd=0,tl=1; q[hd]=1;
19     while(hd<tl){
20         int now=q[hd++]; vis[now]=false;
21         for(int i=head[now];i;i=e[i].next)
22             if(dis[e[i].to]>dis[now]+e[i].v&&!flag[e[i].to]){
23                 dis[e[i].to]=dis[now]+e[i].v;
24                 if(!vis[e[i].to]){
25                     vis[e[i].to]=true; q[tl++]=e[i].to;
26                 }
27             }
28     }
29     return dis[m];
30 }
31 void init(){
32     scanf("%d%d%d%d",&n,&m,&K,&E);
33     for(int i=1;i<=E;i++){
34         int u,v,w;
35         scanf("%d%d%d",&u,&v,&w);
36         ins(u,v,w);
37     }
38     scanf("%d",&d);
39     for(int i=1;i<=d;i++){
40         int u,v,w;
41         scanf("%d%d%d",&u,&v,&w);
42         for(int j=v;j<=w;j++) no[u][j]=true;
43     }
44 }
45 void solve(){
46     for(int i=1;i<=n;i++)
47         for(int j=i;j<=n;j++){
48             memset(flag,0,sizeof(flag));
49             for(int k=1;k<=m;k++)
50                 for(int l=i;l<=j;l++) flag[k]|=no[k][l];
51             cost[i][j]=spfa();
52         }
53     for(int i=1;i<=n;i++)
54         for(int j=i;j<=n;j++)
55             if(cost[i][j]<INF) cost[i][j]*=(j-i+1);
56     memset(f,127,sizeof(f));
57     for(int i=1;i<=n;i++) f[i]=cost[1][i];
58     for(int i=2;i<=n;i++)
59         for(int j=1;j<i;j++)
60             f[i]=min(f[i],f[j]+cost[j+1][i]+K);
61 }
62 int main()
63 {
64     init();
65     solve();
66     printf("%d",f[n]);
67     return 0;
68 }

 

转载于:https://www.cnblogs.com/Beginner-/p/7449152.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongoose日期 时间 范围查询

需要知道的两个修饰符 $gte和$lt $gte (greater-than)$lt (less-than) 写法如下 const start new Date(2018, 3, 1); const end new Date(2018, 4, 1); db.posts.find({created_on: {$gte: start, $lt: end}});

Oracle rman备份和还原恢复数据库

1、切换服务器归档模式&#xff0c;如果已经是归档模式可跳过此步&#xff1a;%sqlplus /nolog &#xff08;启动sqlplus&#xff09;  SQL> conn / as sysdba &#xff08;以DBA身份连接数据库&#xff09;  SQL> shutdown immediate; &#xff08;立即关闭数据库&a…

JavaScript 随意整理2

08.29 # 全局对象* escape/unescape() 对特殊字符编码/解码* encodeURI / decodeURL 对url进行编码/解码* encodeURIComponent / decodeURIComponent 对URL解码/解码* eval() 把字符串当做代码执行# JSON对象* parse() 把josn字符串转换为对象* stringify() 把对…

css scale 缩放基准点

使用transform-origin来进行控制 在使用transform方法进行文字或图像的变形时&#xff0c;是以元素的中心点为基准点进行的。使用transform-origin属性&#xff0c;可以改变变形的基准点。 用法&#xff1a;transform-origin: 10px 10px; 共两个参数&#xff0c;表示相对左上角…

闪回区设置问题

oracle10g提供了一个叫做闪回恢复区(Flashback recovery area)的新特性&#xff0c;可以将所有恢复相关的文件&#xff0c;比如flashback log,archive log,backup set等&#xff0c;放到这个区域集中管理。 查看闪回区内容及使用情况&#xff1a; select * from v$flash_recov…

多主机Docker容器的VLAN划分

原文发表于cu&#xff1a;2016-06-06 参考文档&#xff1a; Docker网络的4种模式&#xff0c;pipework/ovs的简单使用等&#xff1a;http://www.infoq.com/cn/articles/docker-network-and-pipework-open-source-explanation-practice Dockerpool全文档&#xff1a;https://yea…

css p 文本不换行,超出文字显示省略号

.text {// 文本强制不换行white-space: nowrap;// 文本溢出显示省略号text-overflow: ellipsis;// 溢出的部分隐藏overflow: hidden; }

oracle监听无法启动常用解决办法

在cmd下使用lsnrctl start无法启动监听程序提示&#xff1a;TNS-12560: TNS: 协议适配器错误在cmd下进入lsnrctl&#xff0c;输入start提示&#xff1a;TNS-12557: Message 12557 not found; No message file for productNETWORK, facilityTNSns secondary err code: 12560请检…

mongodb 高级查询 统计记录条数

使用count()方法查询表中的记录条数&#xff0c;例如&#xff0c;下面的命令查询表users的记录数量&#xff1a; db.users.find().count();

SQL语句优化

【数据库优化的目的】 1.避免出现页面访问错误 由于数据库连接timeout产生页面5XX错误。 由于慢查询造成页面无法加载。 由于阻塞造成数据无法提交。 2.增加数据库的稳定性 很多数据库问题都是由于低效的查询引起的。 3.优化用户体验 流畅的访问速度。 良好的网站功能体验。 【…

ORA-27101 shared memory realm does not exist 错误处理

ORA-27101 错误处理 racle Database的主机被异常关机&#xff0c;重新启动电脑&#xff0c;Database报ORA-27101 shared memory realm does not exist 错误&#xff0e;可能是windows的oracle service 损坏&#xff0c;可以重建service试试是否可以修复。删除Service&#xff1…

js 获取 当天凌晨时间

需要进行时间比较的时候&#xff0c;一般会遇到从凌晨开始算 new Date(new Date().setHours(0, 0, 0, 0))

移动数据文件、控制文件、日志文件

1. ALTER DATABASE方法&#xff1b;-- 此方法要求关闭数据库-- 用此方法&#xff0c;可以移动任何表空间的数据文件。STEP 1. 下数据库&#xff1a;$ sqlplus /nologSQL> CONNECT INTERNAL;SQL> SHUTDOWN;SQL> EXIT;STEP 2.用操作系统命令移动数据文件&#xff1a;-- …

angular的性能分析 -随记

$watch 的实现原理和性能分析 只有双向绑定的 scope 才会被加入$watch队列&#xff0c;或者手动绑定$watch的$scope所有放在 $scope 中的变量或函数都被加入到了$watch队列当中&#xff0c;每次只要$scope中的一个变量的值发生变化&#xff0c;Angular就会自动调用$apply或者$d…

mongoose 联表、及联查询 使用populate

mongoose 中 使用 populate 进行多表联合查询 drawApply new Schema({salesId: { type: Schema.ObjectId, ref: sales },money: Number,status: { type: Number, default: 0 },createTime: { type: Date, default: Date.now } });sales new Schema({name: { type: String, r…