• ZJOI2006 物流运输


    是最短路+动规的题型!

    和codevs 1403是一样的,还要简单一些

    主要不同的是没有加最开始的方案改变花费

      1 #include<cstdio>
      2 #include<iostream>
      3 #include<cstring>
      4 #include<algorithm>
      5 #include<queue>
      6 #define re register
      7 #define llint long long
      8 #define wl putchar('
    ')
      9 #define read1(a) scanf("%d",&a)
     10 #define De(a) cout<<a<<endl
     11 using namespace std;
     12 const int inf = 0x3f3f3f3f;
     13 struct edge{
     14     int v,nxt,w;
     15 }e[10086<<1];
     16 int h[105],tot;
     17 inline void add(int x,int y,int w)
     18 {
     19     tot++,
     20     e[tot].v=y,
     21     e[tot].w=w,
     22     e[tot].nxt=h[x],
     23     h[x]=tot;
     24 }
     25 int ban[105][50];//第i天第j个点是否可用
     26 int T,n,K,m;//n点m边 
     27 llint cost[100][100];
     28 llint dp[100];
     29 
     30 llint dis[105];
     31 int vis[105];
     32 priority_queue < pair<int,int> > q;
     33 
     34 inline llint dijkstra(int t1,int t2)
     35 {
     36     for(int i=1;i<=n;i++)
     37     {
     38         dis[i]=inf,vis[i]=0;
     39     }
     40     for(int t=t1;t<=t2;t++)
     41     {
     42         for(int i=1;i<=n;i++)
     43         {
     44             if(ban[t][i]) vis[i]=1;
     45         }
     46     }
     47     dis[1]=0;
     48     q.push(make_pair(-0,1));
     49     while(!q.empty())
     50     {
     51         int x=q.top().second;
     52         q.pop();
     53         if(vis[x]) continue;
     54         vis[x]=1;
     55         for(int i=h[x];i;i=e[i].nxt)
     56         {
     57             int v=e[i].v,w=e[i].w;
     58             if(dis[v]>dis[x]+w && )
     59             {
     60                 dis[v]=dis[x]+w,
     61                 q.push(make_pair(-dis[v],v));
     62             }
     63         }
     64     }
     65     return dis[n];
     66 }
     67 
     68 
     69 int qq;
     70 int a,b,c;
     71 int main()
     72 {
     73     scanf("%d%d%d%d",&T,&n,&K,&m);
     74     for(int i=1;i<=m;i++)
     75     {
     76         scanf("%d%d%d",&a,&b,&c);
     77         add(a,b,c),add(b,a,c);
     78     }
     79     scanf("%d",&qq);
     80     for(int i=1;i<=qq;i++)
     81     {
     82         scanf("%d%d%d",&c,&a,&b);
     83         for(int j=a;j<=b;j++)
     84         {
     85             ban[j][c]=1;//ab范围内点c不可用 
     86         }
     87     }
     88     
     89     for(int i=1;i<=T;i++)
     90     {
     91         for(int j=i;j<=T;j++)
     92         {
     93             cost[i][j]=dijkstra(i,j);//cost表示从i到j天若不改变方案 的最短路 
     94         }
     95     }
     96     
     97     for(int i=1;i<=T;i++)
     98     {
     99         dp[i]=cost[1][i]*i;//初始化为从未改变方案的花费,这里忘了乘i 改半天 
    100         for(int j=1;j<i;j++)
    101         {
    102             if(cost[j+1][i]!=inf)
    103                 dp[i]=min(dp[i],dp[j]+cost[j+1][i]*(i-j)+K);//从j天转移过来,第j+1到i天都在使用新的方案,故+K 
    104         }
    105     }
    106     printf("%lld",dp[T]);
    107     
    108 }
  • 相关阅读:
    Office加载项安装
    Office加载项
    centos部署vue项目
    centos系统下安装Nginx
    MongoDB 安装笔记
    CDN基本工作过程
    前端常见跨域解决方案(全)
    JS 扁平化(flatten) 数组
    console.log 打印的值不准确
    arr.flat(Infinity)数组扁平化
  • 原文地址:https://www.cnblogs.com/tythen/p/10052859.html
Copyright © 2020-2023  润新知