【HDOJ】1474 Always On the Run

时间:2023-03-09 10:01:42
【HDOJ】1474 Always On the Run

普通DP。基本和floyd一个思路。

 /* 1474 */
#include <cstdio>
#include <cstring>
#include <cstdlib> #define MAXN 15
#define MAXK 1005
#define MAXD 35
#define INF 999999 int dp[MAXN][MAXK];
int day[MAXN][MAXD];
int price[MAXN][MAXN][MAXD]; int min(int a, int b) {
return a<b ? a:b;
} int main() {
int i, j, k, p;
int n, m, d;
int t = ; #ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
#endif while (scanf("%d %d", &n, &m)!=EOF && (n||m)) {
for (i=; i<=n; ++i) {
for (j=; j<=n; ++j) {
if (i == j)
continue;
scanf("%d", &day[i][j]);
for (k=; k<=day[i][j]; ++k)
scanf("%d", &price[i][j][k]);
}
} for (i=; i<=n; ++i)
for (j=; j<=m; ++j)
dp[i][j] = INF; dp[][] = ;
for (k=; k<=m; ++k) {
for (i=; i<=n; ++i) {
for (j=; j<=n; ++j) {
if (i == j)
continue;
d = (k-)%day[j][i] + ;
if (price[j][i][d] && dp[j][k-]!=INF)
dp[i][k] = min(dp[i][k], dp[j][k-]+price[j][i][d]);
}
}
} printf("Scenario #%d\n", ++t);
if (dp[n][m] == INF)
printf("No flight possible.\n\n");
else
printf("The best flight costs %d.\n\n", dp[n][m]);
} return ;
}