UVa 590 Always on the run
1
#include <stdio.h>
2 #include
<stdlib.h>
3 #include
<iostream>
4 #include
<algorithm>
5 #include
<map>
6 #include
<vector>
7 using
namespace std;
8 typedef pair<int,int> ii;
9 int main()
10 {
11 int n,k,cas=1;
12 while(cin>>n>>k && n!=0 || k!=0)
13 {
14 map<ii,vector<int> > m;
15 for(int i=1; i<=n; i++)
16 {
17 for(int j=1; j<=n; j++)
18 {
19
if(i!=j)
20
{
21
int tmp,tmpf;
22
cin>>tmp;
23
m[ii(i,j)].push_back(tmp);
24
for(int c=0; c<tmp; c++)
25
{
26 cin>>tmpf;
27 m[ii(i,j)].push_back(tmpf);
28
}
29
}
30 }
31 }
32 int dp[1005][15];
33 for(int i=0; i<=k; i++)
34 {
35 for(int j=0; j<=n; j++) dp[i][j]=100000000;
36 }
37 dp[0][1]=0;
38 for(int i=1; i<=k; i++)
39 {
40 for(int j=1; j<=n; j++)
41 {
42
for(int f=1; f<=n; f++)
43
{
44
45
if(f!=j && ((i==1 && j!=1 && f==1) || (i>1)))
46
{
47 if( i<=m[ii(f,j)][0] && m[ii(f,j)][i]!=0 )
48 {
49 dp[i][j]=min(dp[i][j],dp[i-1][f]+m[ii(f,j)][i]);
50 }
51 else if( i>m[ii(f,j)][0] && i%(m[ii(f,j)][0])==0 && m[ii(f,j)][i%(m[ii(f,j)][0])+(m[ii(f,j)][0])]!=0)
52 {
53 dp[i][j]=min(dp[i][j],dp[i-1][f]+m[ii(f,j)][i%(m[ii(f,j)][0])+(m[ii(f,j)][0])]);
54 }
55 else if( i>m[ii(f,j)][0] && i%(m[ii(f,j)][0])!=0 && m[ii(f,j)][i%(m[ii(f,j)][0])]!=0)
56 {
57 dp[i][j]=min(dp[i][j],dp[i-1][f]+m[ii(f,j)][i%(m[ii(f,j)][0])]);
58 }
59
}
60
}
61 }
62 }
63 printf("Scenario
#%d\n",cas++);
64 if(dp[k][n]!=100000000) printf("The best flight costs %d.\n",dp[k][n]);
65 else printf("No flight
possible.\n");
66 cout<<endl;
67 }
68 return 0;
69 }
留言
張貼留言