# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
200291 | 2020-02-06T08:47:35 Z | BThero | Travelling Merchant (APIO17_merchant) | C++17 | 1000 ms | 82296 KB |
// Why am I so dumb? :c // chrono::system_clock::now().time_since_epoch().count() #include<bits/stdc++.h> //#include<ext/pb_ds/assoc_container.hpp> //#include<ext/pb_ds/tree_policy.hpp> #define pb push_back #define mp make_pair #define all(x) (x).begin(), (x).end() #define fi first #define se second using namespace std; //using namespace __gnu_pbds; typedef long long ll; typedef pair<int, int> pii; //template<typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; const int MAXN = (int)1e2 + 5; const int MAXK = (int)1e3 + 5; const ll LINF = (ll)1e15; const int INF = (int)1e9 + 7; int buy[MAXN][MAXK], sell[MAXN][MAXK]; ll dp[MAXN][MAXN][MAXK]; int adj[MAXN][MAXN]; int n, m, k; bool check(int x) { for (int st = 1; st <= n; ++st) { for (int len = 0; len <= n; ++len) { for (int i = 1; i <= n; ++i) { for (int j = 0; j <= k; ++j) { dp[len][i][j] = -LINF; } } } dp[0][st][0] = 0; for (int len = 0; len <= n; ++len) { for (int v = 1; v <= n; ++v) { for (int i = 1; i <= k; ++i) { if (dp[len][v][i] != -LINF) { if (sell[v][i] != -1) { dp[len][v][0] = max(dp[len][v][0], dp[len][v][i] + sell[v][i]); } } } if (dp[len][v][0] != -LINF) { for (int i = 1; i <= k; ++i) { if (buy[v][i] != -1) { dp[len][v][i] = max(dp[len][v][i], dp[len][v][0] - buy[v][i]); } } } for (int i = 0; i <= k; ++i) { if (dp[len][v][i] == -LINF) { continue; } for (int to = 1; to <= n; ++to) { int w = adj[v][to]; if (w != INF) { dp[len + 1][to][i] = max(dp[len + 1][to][i], dp[len][v][i] - w * 1ll * x); } } } } } for (int i = 1; i <= n; ++i) { for (int j = 0; j <= k; ++j) { if (dp[i][st][j] >= 0) { return 1; } } } } return 0; } void solve() { scanf("%d %d %d", &n, &m, &k); for (int i = 1; i <= n; ++i) { for (int j = 1; j <= k; ++j) { scanf("%d %d", &buy[i][j], &sell[i][j]); } } for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { adj[i][j] = INF; } } for (int i = 1; i <= m; ++i) { int u, v, w; scanf("%d %d %d", &u, &v, &w); adj[u][v] = min(adj[u][v], w); } int l = 1, r = INF, ans = 0; while (l <= r) { int mid = (l + r) >> 1; if (check(mid)) { ans = mid; l = mid + 1; } else { r = mid - 1; } } printf("%d\n", ans); } int main() { int tt = 1; while (tt--) { solve(); } return 0; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Execution timed out | 1078 ms | 82296 KB | Time limit exceeded |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 385 ms | 11768 KB | Output is correct |
2 | Correct | 226 ms | 11512 KB | Output is correct |
3 | Incorrect | 843 ms | 12408 KB | Output isn't correct |
4 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Execution timed out | 1084 ms | 50144 KB | Time limit exceeded |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 385 ms | 11768 KB | Output is correct |
2 | Correct | 226 ms | 11512 KB | Output is correct |
3 | Incorrect | 843 ms | 12408 KB | Output isn't correct |
4 | Halted | 0 ms | 0 KB | - |