This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <stdio.h>
#include <string.h>
#define N 500
int max(int a, int b) { return a > b ? a : b; }
int main() {
static int xx[N], yy[N], vv[N], dp[N + 1][N + 1], dq[N + 1][N + 1], dp_[N + 1][N + 1], dq_[N + 1][N + 1];
int n, i, j, k, ans;
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d%d%d", &xx[i], &yy[i], &vv[i]);
ans = 0;
for (k = 2; k <= n + 1; k++) {
for (i = 0; i < k; i++) {
memset(dp_[i], -1, k * sizeof *dp_[i]);
memset(dq_[i], -1, k * sizeof *dq_[i]);
}
if (k == 2) {
dp_[1][0] = vv[0];
if (n >= 3)
dq_[0][1] = vv[2];
} else
for (i = 0; i + 1 < k; i++)
for (j = 0; j + 1 < k; j++) {
int x;
if ((x = dp[i][j]) != -1) {
if (xx[j] == xx[i] || yy[j] == yy[i])
dp_[k - 1][i] = max(dp_[k - 1][i], x + vv[i]);
if (k < n && (xx[j] == xx[k] || yy[j] == yy[k]))
dq_[i][k - 1] = max(dq_[i][k - 1], x + vv[k]);
}
if ((x = dq[i][j]) != -1) {
if (xx[k - 1] == xx[i] || yy[k - 1] == yy[i])
dp_[j][i] = max(dp_[j][i], x + vv[i]);
if (k < n && (xx[k - 1] == xx[k] || yy[k - 1] == yy[k]))
dq_[i][j] = max(dq_[i][j], x + vv[k]);
}
}
for (i = 0; i < k; i++)
for (j = 0; j < k; j++) {
dp[i][j] = dp_[i][j], dq[i][j] = dq_[i][j];
ans = max(ans, max(dp[i][j], dq[i][j]));
}
}
printf("%d\n", ans);
return 0;
}
Compilation message (stderr)
cardgame2.c: In function 'main':
cardgame2.c:12:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
12 | scanf("%d", &n);
| ^~~~~~~~~~~~~~~
cardgame2.c:14:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
14 | scanf("%d%d%d", &xx[i], &yy[i], &vv[i]);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |