一共有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'; } }
标签:590,int,城市,40,uva,inf From: https://www.cnblogs.com/towboa/p/16842874.html