JZOJ 1274. 游历的路线
题目
分析
-
一道显然的DP
-
f[i][j]表示在第i天到达第j个城市的最小话费
代码
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 int f[201][301]; 5 int map[201][201][301]; 6 int n,m; 7 int main () 8 { 9 cin>>n>>m; 10 int T; 11 for (int i=1;i<=n;i++) 12 { 13 for (int j=1;j<=n;j++) 14 { 15 if (j==i) continue; 16 cin>>T; 17 for (int k=1;k<=T;k++) 18 cin>>map[i][j][k]; 19 if (T<m) 20 { 21 int t=1; 22 for (int k=T+1;k<=m;k++) 23 { 24 map[i][j][k]=map[i][j][t]; 25 t++; 26 if (t>T) 27 t=1; 28 } 29 } 30 } 31 32 } 33 memset(f,0x3f,sizeof(f)); 34 f[1][1]=0; 35 for (int i=2;i<=n;i++) 36 f[1][i]=map[1][i][1]; 37 for (int i=2;i<=m;i++) 38 { 39 for (int j=1;j<=n;j++) 40 { 41 for (int k=1;k<=n;k++) 42 { 43 if (map[k][j][i]==0||j==k||f[i-1][k]==0) 44 continue; 45 f[i][j]=min(f[i][j],f[i-1][k]+map[k][j][i]); 46 } 47 } 48 } 49 cout<<f[m][n]; 50 }
为何要逼自己长大,去闯不该闯的荒唐