結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
agatan
|
| 提出日時 | 2015-04-26 15:25:17 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
AC
|
| 実行時間 | 5 ms / 5,000 ms |
| コード長 | 1,407 bytes |
| コンパイル時間 | 785 ms |
| コンパイル使用メモリ | 103,436 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-12 02:38:19 |
| 合計ジャッジ時間 | 2,140 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 40 |
ソースコード
import std.array, std.stdio, std.string, std.algorithm, std.conv;
int[][] dp;
void main()
{
int N = readln.strip.to!int;
int C = readln.strip.to!int;
int V = readln.strip.to!int;
auto S = readln.split.map!"(a.to!int - 1)";
auto T = readln.split.map!"(a.to!int - 1)";
auto Y = readln.split.map!(to!int);
auto M = readln.split.map!(to!int);
int[] es;
es.length = N;
foreach (ref e; es) {
e = 0;
}
int[][] edge;
edge.length = N;
foreach (ref e; edge) {
e.length = V;
}
int[][] dist;
dist.length = N;
foreach (ref e; dist) {
e.length = V;
}
int[][] cost;
cost.length = N;
foreach (ref e; cost) {
e.length = V;
}
foreach (i; 0..V) {
edge[S[i]][es[S[i]]] = T[i];
dist[S[i]][es[S[i]]] = M[i];
cost[S[i]][es[S[i]]] = Y[i];
es[S[i]]++;
}
dp.length = N;
foreach (ref d; dp) {
d.length = C+1;
d[] = int.max;
}
foreach(ref d; dp[0]) d = 0;
foreach (n; 0..N) {
foreach (c; 0..C+1) {
if (dp[n][c] != int.max)
foreach (j; 0..es[n]) {
if (c + cost[n][j] <= C) dp[edge[n][j]][c + cost[n][j]] = min(dp[edge[n][j]][c+cost[n][j]], dp[n][c] + dist[n][j]);
}
}
}
if (dp[N-1][C] == int.max) writeln(-1);
else writeln(dp[N-1][C]);
}
agatan