• 洛谷 P1359 租用游艇


    题目描述

    长江游艇俱乐部在长江上设置了n 个游艇出租站1,2,…,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i 到游艇出租站j 之间的租金为r(i,j),1<=i<=j<=n。试设计一个算法,计算出从游艇出租站1 到游艇出租站n 所需的最少租金。

    对于给定的游艇出租站i 到游艇出租站j 之间的租金为r(i,j),1<=i<j<=n,编程计算从游艇出租站1 到游艇出租站n所需的最少租金。

    保证计算过程中任何时刻数值都不超过10^6

    输入输出格式

    输入格式:

    由文件提供输入数据。文件的第1 行中有1 个正整数n(n<=200),表示有n个游艇出租站。接下来的n-1 行是一个半矩阵r(i,j),1<=i<j<=n。

    输出格式:

    程序运行结束时,将计算出的从游艇出租站1 到游艇出租站n所需的最少租金输出到文件中。

    输入输出样例

    输入样例#1:
    3
    5 15
    7
    
    
    输出样例#1:
    12
    
     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #define INF 0x7fffffff
     5 #define MX 50010
     6 using namespace std;
     7 
     8 struct node {
     9     int to,next,dis;
    10 }e[MX];
    11 int head[MX],ds[MX];
    12 bool vis[MX];
    13 int n,i,j,k,tot;
    14 void add(int u,int v,int w)
    15 {
    16     tot++;
    17     e[tot].to=v;
    18     e[tot].next=head[u];
    19     head[u]=tot;
    20     e[tot].dis=w; 
    21 }
    22 void spfa(int n)
    23 {
    24     int l=0,r=0,que[2010];
    25     for(i=1;i<=k;++i){
    26         ds[i]=INF;
    27         vis[i]=0;
    28     }
    29     r++;
    30     que[r]=n;
    31     ds[n]=0;
    32     vis[k]=1;
    33     while(l<=r)
    34     {
    35         l++;
    36         int top=que[l];
    37         vis[top]=0;
    38         for(i=head[top];i;i=e[i].next)
    39         {
    40             int v=e[i].to;
    41             if(ds[v]>ds[top]+e[i].dis)
    42             {
    43                 ds[v]=ds[top]+e[i].dis;
    44                 if(!vis[v])
    45                 {
    46                     vis[v]=1;
    47                     r++;
    48                     que[r]=v;
    49                 }
    50             }
    51         }
    52     }
    53 }
    54 int main()
    55 {
    56     int c,x=0,y=0;
    57     cin>>k;
    58     for(i=1;i<=k-1;++i)
    59     {
    60         for(j=i+1;j<=k;++j)
    61         {
    62             cin>>c;
    63             add(i,j,c);
    64         }
    65     }
    66     spfa(1);
    67     cout<<ds[k]; 
    68 }

    这破题都卡好长时间...

  • 相关阅读:
    【BZOJ4367】[IOI2014]holiday假期 分治+主席树
    【BZOJ1264】[AHOI2006]基因匹配Match DP+树状数组
    【BZOJ4379】[POI2015]Modernizacja autostrady 树形DP
    【BZOJ4380】[POI2015]Myjnie 区间DP
    【BZOJ4382】[POI2015]Podział naszyjnika 堆+并查集+树状数组
    【BZOJ4384】[POI2015]Trzy wieże 树状数组
    【BZOJ4388】JOI2012 invitation 堆+线段树+并查集(模拟Prim)
    【BZOJ4550】小奇的博弈 博弈论
    Sqlserver列出所有数据库名,表名,字段名
    聚合与组合的区别?
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6294390.html
Copyright © 2020-2023  润新知