bzoj1003物流运输

题意:有n天,m个点,每天要从1走到m,一些点有些时段不能到达,保证每天必有一条路能到m,每次更换路线花费k,求最少需要多少花费

此题数据范围很小,随便乱搞。

先跑一个n^2的spfa,求出cost[i][j](第i天到第j天每天的最小花费)

再一个dp就完了:

  f[i]=min(f[i],f[j]+cost[j+1][i]*(i-j)+k);

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <queue>
 5 using namespace std;
 6 struct edge {
 7     int v,next,w;
 8 }e[2005];
 9 int k=1,n,m,E,d,kk;
10 int tim[25][105],avl[25],dis[25],vis[105],head[2005],f[105],cost[105][105];
11 void adde(int u,int v,int w) {
12     e[k].v=v;e[k].w=w;e[k].next=head[u];head[u]=k++;
13 }
14 queue <int> q;
15 int spfa(int x,int y) {
16     memset(dis,63,sizeof(dis));
17     memset(avl,0,sizeof(avl));
18     memset(vis,0,sizeof(vis));
19     for (int i=1;i<=m;i++)
20         for (int j=x;j<=y;j++)
21             if (tim[i][j]) avl[i]=1;
22     q.push(1);vis[1]=1;dis[1]=0;
23     while (!q.empty()) {
24         int u=q.front();q.pop();vis[u]=0;
25         for (int i=head[u];~i;i=e[i].next) {
26             int v=e[i].v;
27             if (!avl[v]&&dis[v]>dis[u]+e[i].w) {
28                 dis[v]=dis[u]+e[i].w;
29                 if (!vis[v]) {
30                     q.push(v);vis[v]=1;
31                 }
32             }
33         }
34     }
35     return dis[m];
36 }
37
38 int main()
39 {
40     memset(head,-1,sizeof(head));
41     memset(f,63,sizeof(f));
42     f[0]=0;
43     scanf("%d%d%d%d",&n,&m,&kk,&E);
44     for (int i=1,a,b,c;i<=E;i++) {
45         scanf("%d%d%d",&a,&b,&c);
46         adde(a,b,c);adde(b,a,c);
47     }
48     scanf("%d",&d);
49     for (int i=1,p,a,b;i<=d;i++) {
50         scanf("%d%d%d",&p,&a,&b);
51         for (int j=a;j<=b;j++) tim[p][j]=1;
52     }
53     for (int i=1;i<=n;i++)
54         for (int j=1;j<=n;j++)
55             cost[i][j]=spfa(i,j);
56     for (int i=1;i<=n;i++)
57         for (int j=0;j<i;j++)
58             if(cost[j+1][i]!=0x3f3f3f3f)
59               f[i]=min(f[i],f[j]+cost[j+1][i]*(i-j)+kk);
60     printf("%d\n",f[n]-kk);
61     return 0;
62 }

时间: 2024-11-25 05:29:36

bzoj1003物流运输的相关文章

[ZJOI2006][BZOJ1003] 物流运输trans

1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4039  Solved: 1687[Submit][Status][Discuss] Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪.由于各种因素的存在,有的时候某个码头会无法装卸货物

bzoj1003 物流运输

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

bzoj1003 物流运输(dijkstra+dp)

题意: 一共有n天,每天都要把货物从1运到m,代价是路长 然后每个地方都可能有几天不能走 然后你就必须改变路线在那天避开这些地方,这需要代价k 问你n天的最小代价 思路: 一共最多100天,可以n^2暴力时间段,表示这段时间的路径是一样的 然后跑dijkstra,得出最优解 然后用dp更新状态 比如当前是从第l天到第r天,dijkstra结果在d[m]中,则 dp[r]=min(dp[r],dp[l-1]+(r-l+1)*d[m]+k); dp初值为inf,dp[0]的初值为0,最后dp[n]-

BZOJ1003 ZJOI2006物流运输trans 0&#39;

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

bzoj1003: [ZJOI2006]物流运输

dp+最短路.暴力枚举就可以了.O(n3logn).样例中m=n然后测样例过了.然后 54行习惯性的dis[n]然后就WA了!!!. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) #de

【bzoj1003】[ZJOI2006]物流运输

1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6331  Solved: 2610[Submit][Status][Discuss] Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪.由于各种因素的存在,有的时候某个码头会无法装卸货物.这时候就

spfa最短路+DP BZOJ1003 [ZJOI2006] 物流运输

1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 7935  Solved: 3316[Submit][Status][Discuss] Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转 停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪.由于各种 因素的存在,有的时候某个码头会无法装卸货物.这时

BZOJ 1003: [ZJOI2006]物流运输trans

二次联通门 : BZOJ 1003: [ZJOI2006]物流运输trans /* BZOJ 1003: [ZJOI2006]物流运输trans Spfa + Dp Spfa预处理出i到j天的最小花费 然后N^2 dp即可 */ #include <cstdio> #include <iostream> #include <cstring> #include <queue> #define INF 1e6 const int BUF = 12312313;

luoguP1772 [ZJOI2006]物流运输 x

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