Submission #71197448
Source Code Expand
Copy
#include <stdio.h>int N;int E[16][16];int memo[16][1 << 16];int calc(int pos, int left) {int ans = -1;int i;if (left == 0) return E[pos][0];if (memo[pos][left]) return ~memo[pos][left];for (i = 0; i < N; i++) {if ((left >> i) & 1) {int candidate = calc(i, left & ~(1 << i)) + E[pos][i];if (ans < 0 || candidate < ans) ans = candidate;}}return ~(memo[pos][left] = ~ans);}
#include <stdio.h>
int N;
int E[16][16];
int memo[16][1 << 16];
int calc(int pos, int left) {
int ans = -1;
int i;
if (left == 0) return E[pos][0];
if (memo[pos][left]) return ~memo[pos][left];
for (i = 0; i < N; i++) {
if ((left >> i) & 1) {
int candidate = calc(i, left & ~(1 << i)) + E[pos][i];
if (ans < 0 || candidate < ans) ans = candidate;
}
}
return ~(memo[pos][left] = ~ans);
}
int main(void) {
int i, j;
if (scanf("%d", &N) != 1) return 1;
for (i = 0; i < N - 1; i++) {
for (j = i + 1; j < N; j++) {
if (scanf("%d", &E[i][j]) != 1) return 1;
E[j][i] = E[i][j];
}
}
if (N == 2) {
puts("0 0");
} else {
printf("%d %d\n", N, calc(0, (1 << N) - 2));
}
return 0;
}
/*
道路N-1本では、良くて木にしかならず、この状態では頂点を1個外すとダメになる所がありそう
道路N本で、ぐるっとすれば、条件を満たす (十分条件) → 多分最小本数
※ただしN=2のときは頂点1個外すと1個だけになるので、適当な道路1本あればいい
(というかそもそも道路の候補が1本しかないだろう)
↑嘘……ではないが、「残りの全地区」でいいので、道路はなくてもいい
道路N本でぐるっとしない → 多分次数1の頂点ができて、そこに繋がるところを消すと死ぬ
最初の地域からスタートして、適当な順でたどって、最後の地域から最初の地域に戻る
*/
Submission Info
| Submission Time | |
|---|---|
| Task | A - 特別作戦 |
| User | mikecat |
| Language | C (gcc 12.2.0) |
| Score | 100 |
| Code Size | 1521 Byte |
| Status | AC |
| Exec Time | 10 ms |
| Memory | 3352 KiB |
Judge Result
| Set Name | All | ||
|---|---|---|---|
| Score / Max Score | 100 / 100 | ||
| Status |
|
| Set Name | Test Cases |
|---|---|
| All | 00-sample, 01-maximum, 02-minimum, 03-flat, 50-random-00, 50-random-01, 50-random-02, 50-random-03, 50-random-04, 50-random-05, 50-random-06, 50-random-07, 50-random-08, 50-random-09, 50-random-10, 50-random-11, 50-random-12, 50-random-13, 50-random-14, 50-random-15, 50-random-16, 50-random-17, 50-random-18, 50-random-19 |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00-sample | AC | 0 ms | 1764 KiB |
| 01-maximum | AC | 10 ms | 3348 KiB |
| 02-minimum | AC | 0 ms | 1576 KiB |
| 03-flat | AC | 10 ms | 3348 KiB |
| 50-random-00 | AC | 0 ms | 1664 KiB |
| 50-random-01 | AC | 1 ms | 1808 KiB |
| 50-random-02 | AC | 0 ms | 1692 KiB |
| 50-random-03 | AC | 0 ms | 1740 KiB |
| 50-random-04 | AC | 0 ms | 1668 KiB |
| 50-random-05 | AC | 0 ms | 1612 KiB |
| 50-random-06 | AC | 2 ms | 2112 KiB |
| 50-random-07 | AC | 0 ms | 1680 KiB |
| 50-random-08 | AC | 5 ms | 2416 KiB |
| 50-random-09 | AC | 10 ms | 3352 KiB |
| 50-random-10 | AC | 0 ms | 1684 KiB |
| 50-random-11 | AC | 5 ms | 2424 KiB |
| 50-random-12 | AC | 0 ms | 1660 KiB |
| 50-random-13 | AC | 0 ms | 1504 KiB |
| 50-random-14 | AC | 3 ms | 2016 KiB |
| 50-random-15 | AC | 1 ms | 1688 KiB |
| 50-random-16 | AC | 0 ms | 1744 KiB |
| 50-random-17 | AC | 2 ms | 2144 KiB |
| 50-random-18 | AC | 5 ms | 2372 KiB |
| 50-random-19 | AC | 1 ms | 1672 KiB |