結果
問題 | No.1 道のショートカット |
ユーザー |
|
提出日時 | 2016-03-05 19:08:42 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 325 ms / 5,000 ms |
コード長 | 1,579 bytes |
コンパイル時間 | 2,372 ms |
コンパイル使用メモリ | 76,816 KB |
実行使用メモリ | 47,300 KB |
最終ジャッジ日時 | 2024-07-20 16:22:23 |
合計ジャッジ時間 | 12,606 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 40 |
ソースコード
import java.util.Scanner; public class Main { static int[] S; static int[] T; static int[] Y; static int[] M; static int[][] dp; static final int INF = Integer.MAX_VALUE/2; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int C = sc.nextInt(); int V = sc.nextInt(); dp = new int[N][C+1]; S = new int[V]; for (int i=0; i<V; i++) { S[i] = sc.nextInt()-1; } T = new int[V]; for (int i=0; i<V; i++) { T[i] = sc.nextInt()-1; } Y = new int[V]; for (int i=0; i<V; i++) { Y[i] = sc.nextInt(); } M = new int[V]; for (int i=0; i<V; i++) { M[i] = sc.nextInt(); } for (int i=0; i<N; i++) { for (int j=0; j<=C; j++) { dp[i][j] = INF; } } for (int i=0; i<=C; i++) { dp[0][i] = 0; } for (int i=0; i<N; i++) { for (int j=0; j<=C; j++) { for (int k=0; k<V; k++) { if (S[k] == i) { if (j+Y[k]<=C) { dp[T[k]][j+Y[k]] = Math.min(dp[T[k]][j+Y[k]], dp[i][j]+M[k]); } } } } } int ans = dp[N-1][C]; if (ans == INF) { System.out.println(-1); } else { System.out.println(ans); } sc.close(); } }