제출 #1309985

#제출 시각아이디문제언어결과실행 시간메모리
1309985quollcucumber`Netrpeljivost (COI23_netrpeljivost)C++20
10 / 100
15 ms2940 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n;
int arr[16][16];
int score(vector<bool> v) {
    if(!v[0] && v[1] && v[2]) {
        int a = 9;
    }
    int a[n];
    for(int i = 0; i < n; i++) {
        int l = 0, r=  n;
        int pos = 1;
        while(l + 1< r) {
            int mid = (l + r) / 2;
            if(i < mid) {
                if(v[pos-1]) {
                    r = mid;
                    pos = pos* 2 + 1;
                }else {
                    r = mid;
                    pos = pos *2;
                }
            }else {
                if(!v[pos-1]) {
                    l = mid;
                    pos = pos* 2 + 1;
                }else {
                    l = mid;
                    pos = pos *2;
                }
            }
        }
        a[pos - n] = i;
    }
    int total = 0;
    for(int i = 0; i < n -1; i++) {
        total += arr[a[i]][a[i+1]];
    }
    return total;
}
signed main(){
    cin >>n;
    for(int i = 0; i < n;i++) {
        for(int j = 0; j < n; j++) {
            cin >> arr[i][j];
        }
    }
    queue<vector<bool>> q;
    q.push({});
    for(int i = 0; i < n-1; i++) {
        int sz = q.size();
        for(int j = 0; j < sz; j++) {
            vector<bool> v = q.front();
            q.pop();
            v.push_back(true);
            q.push(v);
            v.pop_back();
            v.push_back(false);
            q.push(v);
        }
    }
    int minval = 1000000000000000;
    while(!q.empty()) {
        vector<bool> a = q.front();
        q.pop();
        minval = min(minval, score(a));
    }
    cout<<minval<<'\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...