Submission #98445

# Submission time Handle Problem Language Result Execution time Memory
98445 2019-02-23T17:29:59 Z luciocf Kronican (COCI16_kronican) C++14
100 / 100
1942 ms 16900 KB
#include <bits/stdc++.h>

using namespace std;

const int maxn = 21;
const long long inf = 2e18+10;

typedef long long ll;

ll dp[1<<maxn];

int n, k;

int num[maxn][maxn];

ll solve(int mask)
{
	if (__builtin_popcount(mask) == k) return 0LL;
	if (dp[mask] != -1) return dp[mask];

	ll ans = inf;
	for (int i = 0; i < n; i++)
	{
		if (!(mask&(1<<i))) continue;

		for (int j = 0; j < n; j++)
		{
			if (j == i || !(mask&(1<<j))) continue;

			int mask2 = mask^(1<<i);

			ans = min(ans, (ll)num[i][j]+solve(mask2));
		}
	}

	return dp[mask] = ans;
}

int main(void)
{
	cin >> n >> k;

	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			cin >> num[i][j];

	memset(dp, -1LL, sizeof dp);

	cout << solve((1<<n)-1) << "\n";
}
# Verdict Execution time Memory Grader output
1 Correct 21 ms 16768 KB Output is correct
2 Correct 16 ms 16768 KB Output is correct
3 Correct 17 ms 16716 KB Output is correct
4 Correct 18 ms 16864 KB Output is correct
5 Correct 29 ms 16776 KB Output is correct
6 Correct 48 ms 16768 KB Output is correct
7 Correct 87 ms 16896 KB Output is correct
8 Correct 165 ms 16888 KB Output is correct
9 Correct 1942 ms 16812 KB Output is correct
10 Correct 161 ms 16900 KB Output is correct