답안 #584719

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
584719 2022-06-27T22:08:43 Z _L__ Kronican (COCI16_kronican) C++17
100 / 100
1191 ms 8492 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]
   38 |   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]
   41 |       scanf("%d", &a[i][j]);
      |       ~~~~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 8492 KB Output is correct
2 Correct 3 ms 8404 KB Output is correct
3 Correct 4 ms 8488 KB Output is correct
4 Correct 4 ms 8404 KB Output is correct
5 Correct 12 ms 8488 KB Output is correct
6 Correct 24 ms 8404 KB Output is correct
7 Correct 42 ms 8404 KB Output is correct
8 Correct 95 ms 8404 KB Output is correct
9 Correct 1191 ms 8404 KB Output is correct
10 Correct 97 ms 8404 KB Output is correct