Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstring>
- #include <ios>
- using namespace std;
- #define SIZE 16
- #define INF 1000000000
- int n;
- int cost[SIZE][SIZE];
- int dp[1<<SIZE][SIZE];
- int calcdp(int mask, int last) {
- int &res = dp[mask][last];
- if (res != -1)
- return res;
- res = INF;
- if (mask == 1) {
- if (cost[0][last])
- res = cost[0][last];
- return res;
- }
- for (int i = 1; i < n; ++i) {
- int m = 1 << i;
- if (mask & m && cost[i][last]) {
- res = min(res, calcdp(mask ^ m, i) + cost[i][last]);
- }
- }
- return res;
- }
- int main() {
- memset(dp, 255, sizeof(dp));
- scanf("%d", &n);
- for (int i = 0; i < n; ++i)
- for (int j = 0; j < n; ++j)
- scanf("%d", &cost[i][j]);
- int res = calcdp((1<<n)-1, 0);
- printf("%d", res == INF ? -1 : res);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement