一共有n座城市,要在这n座城市旅游k天,从城市1出发,第k天到达城市n。

输入有n*(n-1)行,每n-1行代表i到除了i之外的其他城市航班的天数以及价格。

求最小花费。

 

 

 #include <iostream>
 #include <algorithm>
 using namespace std; 
  const int N=1e3+2;
 // #define int long long
  int n,m;
  int f[N][40],len[40][40],c[40][40][40];
  const int inf=1e9;
 void solve(){
     int i,j,k;
     for(i=1;i<=n;i++)
      for(j=1;j<=n;j++){
          if(i==j) continue;
          cin>>len[i][j];
          for(k=1;k<=len[i][j];k++) cin>>c[i][j][k];
      }
     for(i=0;i<=n;i++) 
      for(k=0;k<=m;k++) f[k][i]=inf;
      f[0][1]=0;
      
     for(k=1;k<=m;k++)
      for(i=1;i<=n;i++)
       for(j=1;j<=n;j++){
           if(i==j) continue;
           int t=(k-1)%len[j][i]+1;
           if(f[k-1][j]==inf||c[j][i][t]==0) continue;
           
           f[k][i]=min(f[k][i],f[k-1][j]+c[j][i][t]);
       }
 }
 signed main(){
     int cas=0;
     while(cin>>n>>m){
         if(n==0||m==0) break; 
         ++cas;
         
         solve();
         printf("Scenario #%d\n",cas);
         if(f[m][n]==inf) cout<<"No flight possible.";
         else 
         printf("The best flight costs %d.",f[m][n]);
         cout<<'\n'<<'\n';
     }
 }
 
 
 

 

posted on 2022-10-31 00:30  towboat  阅读(18)  评论(0)    收藏  举报