Submission #153071

# Submission time Handle Problem Language Result Execution time Memory
153071 2019-09-12T08:25:32 Z hdj79 Kronican (COCI16_kronican) C++14
100 / 100
1728 ms 8696 KB
#include <cstdio>
#include <string>
#include <vector>
#include <map>
#include <cstdlib>
#include <algorithm>
#include <cstring>

using namespace std;

typedef long long llint;
typedef pair <int, int> pii;

const int MAXN = 21;

int n, k;
int a[MAXN][MAXN];
int dp[1 << MAXN];

int solve(int mask) {
  if (__builtin_popcount(mask) == k) return 0;
  int &ret = dp[mask];
  if (ret != -1) return ret;
  ret = 1 << 30;
  for (int i = 0; i < n; ++i) {
    if (!(mask & (1 << i)) ) continue;
    for (int j = 0; j < n; ++j) {
      if (i == j) continue;
      if (!(mask & (1 << j))) continue;
      ret = min(ret, solve(mask ^ (1 << i)) + a[i][j]);
    }
  }
  return ret;
}

int main (void){
  memset(dp, -1, sizeof dp);
  scanf("%d%d", &n, &k);
  for (int i = 0; i < n; ++i) 
    for (int j = 0; j < n; ++j)
      scanf("%d", &a[i][j]);
  printf("%d\n", solve((1 << n) - 1));
  return 0;
}

Compilation message

kronican.cpp: In function 'int main()':
kronican.cpp:38:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &n, &k);
   ~~~~~^~~~~~~~~~~~~~~~
kronican.cpp:41:12: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
       scanf("%d", &a[i][j]);
       ~~~~~^~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 9 ms 8440 KB Output is correct
2 Correct 9 ms 8524 KB Output is correct
3 Correct 9 ms 8440 KB Output is correct
4 Correct 9 ms 8572 KB Output is correct
5 Correct 21 ms 8552 KB Output is correct
6 Correct 38 ms 8488 KB Output is correct
7 Correct 66 ms 8440 KB Output is correct
8 Correct 146 ms 8584 KB Output is correct
9 Correct 1728 ms 8552 KB Output is correct
10 Correct 159 ms 8696 KB Output is correct