#define __STDC_FORMAT_MACROS
#include <inttypes.h>
#include <cstdio>
#define MIN(a,b) ((a) < (b)) ? (a) : (b)
#define MAX(a,b) ((a) > (b)) ? (a) : (b)
uint32_t c[2000][2000];
int main(void) {
int n;
scanf("%d", &n);
int b[n], d[n], y, z, p;
uint64_t s = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n-i; j++)
{
scanf("%" SCNu32, &c[j][i]);
}
}
for (int i = 0; i < n; i++)
{
b[i] = 0;
d[i] = i;
}
for (int i = 1; i < n; i++)
{
for (int j = n-i-1; j >= 0; j--)
{
p = -1;
for (int k = 0; k <= i; k++)
{
y = j+k;
if (c[b[y]][d[y]] > c[i][j])
{
if (p != -1 && c[b[y]][d[y]] > c[b[p]][d[p]] || p == -1)
p = y;
}
}
if (p != -1)
{
b[p] = i;
d[p] = j;
}
}
}
// for (int i = 0; i < n; i++)
// printf("%d%c", b[i], i < n-1 ? ' ' : '\n');
// for (int i = 0; i < n; i++)
// printf("%d%c", d[i], i < n-1 ? ' ' : '\n');
for (int i = 0; i < n; i++)
s += c[b[i]][d[i]];
printf("%" PRIu64 "\n", s);
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #define __STDC_FORMAT_MACROS #include <inttypes.h> #include <cstdio> #define MIN(a,b) ((a) < (b)) ? (a) : (b) #define MAX(a,b) ((a) > (b)) ? (a) : (b) uint32_t c[2000][2000]; int main(void) { int n; scanf("%d", &n); int b[n], d[n], y, z, p; uint64_t s = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n-i; j++) { scanf("%" SCNu32, &c[j][i]); } } for (int i = 0; i < n; i++) { b[i] = 0; d[i] = i; } for (int i = 1; i < n; i++) { for (int j = n-i-1; j >= 0; j--) { p = -1; for (int k = 0; k <= i; k++) { y = j+k; if (c[b[y]][d[y]] > c[i][j]) { if (p != -1 && c[b[y]][d[y]] > c[b[p]][d[p]] || p == -1) p = y; } } if (p != -1) { b[p] = i; d[p] = j; } } } // for (int i = 0; i < n; i++) // printf("%d%c", b[i], i < n-1 ? ' ' : '\n'); // for (int i = 0; i < n; i++) // printf("%d%c", d[i], i < n-1 ? ' ' : '\n'); for (int i = 0; i < n; i++) s += c[b[i]][d[i]]; printf("%" PRIu64 "\n", s); return 0; } |
English