結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
atn112323
|
| 提出日時 | 2016-05-02 23:08:53 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 17 ms / 5,000 ms |
| コード長 | 886 bytes |
| コンパイル時間 | 501 ms |
| コンパイル使用メモリ | 58,732 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-20 16:23:14 |
| 合計ジャッジ時間 | 1,811 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 40 |
ソースコード
#include <algorithm>
#include <iostream>
using namespace std;
const int INF = 1000000;
int N, C, V;
int S[1500], T[1500], Y[1500], M[1500];
int dp[50][301];
int main(int argc, char** argv) {
cin >> N >> C >> V;
for (int i = 0; i < V; i++) {
cin >> S[i]; S[i]--;
}
for (int i = 0; i < V; i++) {
cin >> T[i]; T[i]--;
}
for (int i = 0; i < V; i++) {
cin >> Y[i];
}
for (int i = 0; i < V; i++) {
cin >> M[i];
}
for (int i = 0; i < N; i++) {
for (int j = 0; j <= C; j++) {
dp[i][j] = INF;
}
}
dp[0][C] = 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 && Y[k] <= j) {
dp[T[k]][j - Y[k]] = min(dp[T[k]][j - Y[k]], dp[i][j] + M[k]);
}
}
}
}
int res = INF;
for (int i = 0; i <= C; i++) {
res = min(res, dp[N - 1][i]);
}
res = res == INF ? -1 : res;
cout << res << endl;
}
atn112323