82432024-01-13 20:16:05sangerafFestés (50 pont)cpp17Accepted 50/50374ms27728 KiB
#include<bits/stdc++.h>
using namespace std;

vector<long long> r;
vector<vector<long long>> c;

int main(){
    int n, m; cin >> n >> m;
    r.resize(n);
    for(int i=0; i<n; i++) cin >> r[i];
    c.resize(m+1);
    for(int i=1; i<=m; i++){
        c[i].resize((n*(n+1))/2);
        for(int j=0; j<(n*(n+1))/2; j++){
            cin >> c[i][j];
        }
    }

    long long mini = LLONG_MAX;
    long long sum = 0;

    if(n==2){
        // 0+1
        sum = r[0] + r[1];
        mini = min(mini, sum);

        // 0
        sum = r[0];
        for(int i=1; i<=m; i++){
            sum += min(c[i][1], c[i][2]); // (0 1) / (1)
        }
        mini = min(mini, sum);

        // 1
        sum = r[1];
        for(int i=1; i<=m; i++){
            sum += min(c[i][0], c[i][1]); // (0) / (0 1)
        }
        mini = min(mini, sum);

        // nincs
        sum = 0;
        for(int i=1; i<=m; i++){
            sum += min(c[i][0] + c[i][2], c[i][1]); // (0)(1) / (0 1)
        }
        mini = min(mini, sum);

    }else if(n==3){
        // 0+1+2
        sum = r[0] + r[1] + r[2];
        mini = min(mini, sum);

        // 0+1
        sum = r[0] + r[1];
        for(int i=1; i<=m; i++){
            sum += min(c[i][2], min(c[i][4], c[i][5])); // (0 1 2) / (1 2) / (2)
        }
        mini = min(mini, sum);

        // 0+2
        sum = r[0] + r[2];
        for(int i=1; i<=m; i++){
            long long oldal = min(c[i][1], c[i][4]); // (0 1) / (1 2)
            long long kozep = min(c[i][2], c[i][3]); // (0 1 2) / (1)
            sum += min(oldal, kozep);
        }
        mini = min(mini, sum);

        // 1+2
        sum = r[1] + r[2];
        for(int i=1; i<=m; i++){
            sum += min(c[i][0], min(c[i][1], c[i][2])); // (0) / (0 1) / (0 1 2)
        }
        mini = min(mini, sum);

        // 0
        sum = r[0];
        for(int i=1; i<=m; i++){
            long long db1 = min(c[i][2], c[i][4]); // (0 1 2) / (1 2)
            long long db2 = c[i][5] + min(c[i][1], c[i][3]); // (0 1)(2) / (1)(2)
            sum += min(db1, db2);
        }
        mini = min(mini, sum);

        // 1
        sum = r[1];
        for(int i=1; i<=m; i++){
            long long db1 = c[i][2]; // (0 1 2)
            long long db2_b = min(c[i][0], c[i][1]); // (0) / (0 1)
            long long db2_j = min(c[i][4], c[i][5]); // (1 2) / (2)
            sum += min(db1, db2_b + db2_j);
        }
        mini = min(mini, sum);

        // 2
        sum = r[2];
        for(int i=1; i<=m; i++){
            long long db1 = min(c[i][1], c[i][2]); // (0 1) / (0 1 2)
            long long db2 = c[i][0] + min(c[i][3], c[i][4]); // (0)(1) / (0)(1 2)
            sum += min(db1, db2);
        }
        mini = min(mini, sum);

        // nincs
        sum = 0;
        for(int i=1; i<=m; i++){
            long long db1 = c[i][2]; // (0 1 2)
            long long db2_csak2 = c[i][1] + c[i][4]; // (0 1)(1 2)
            long long db2_1_2 = min(c[i][0] + c[i][4], c[i][1] + c[i][5]); // (0)(1 2) / (0 1)(2)
            long long db3 = c[i][0] + c[i][3] + c[i][5]; // (0)(1)(2)
            sum += min(min(db1, db3), min(db2_csak2, db2_1_2));
        }
        mini = min(mini, sum);

    }else if(n==4){
        // 0+1+2+3
        sum = r[0]+r[1]+r[2]+r[3];
        mini = min(mini, sum);

        // ki 3
        sum = r[0]+r[1]+r[2];
        for(int i=1; i<=m; i++){
            sum += min(min(c[i][3], c[i][6]), min(c[i][8], c[i][9])); // (0 1 2 3) / (1 2 3) / (2 3) / (3)
        }
        mini = min(mini, sum);

        // ki 2
        sum = r[0]+r[1]+r[3];
        for(int i=1; i<=m; i++){
            long long b = min(c[i][2], c[i][5]); // (0 1 2) / (1 2)
            long long j = min(c[i][7], c[i][8]); // (2) / (2 3)
            long long bj = min(c[i][3], c[i][6]); // (0 1 2 3) / (1 2 3)
            sum += min(min(b, j), bj);
        }
        mini = min(mini, sum);

        // ki 1
        sum = r[0]+r[2]+r[3];
        for(int i=1; i<=m; i++){
            long long b = min(c[i][1], c[i][4]); // (0 1) / (1)
            long long j = min(c[i][5], c[i][6]); // (1 2) / (1 2 3)
            long long bj = min(c[i][2], c[i][3]); // (0 1 2) / (0 1 2 3)
            sum += min(min(b, j), bj);
        }
        mini = min(mini, sum);

        // ki 0
        sum = r[1]+r[2]+r[3];
        for(int i=1; i<=m; i++){
            sum += min(min(c[i][0], c[i][1]), min(c[i][2], c[i][3])); // (0) / (0 1) / (0 1 2) / (0 1 2 3)
        }
        mini = min(mini, sum);

        // 0+1
        sum = r[0]+r[1];
        for(int i=1; i<=m; i++){
            long long db1 = min(min(c[i][3], c[i][6]), c[i][8]); // (0 1 2 3) / (1 2 3) / (2 3)
            long long db2 = c[i][9] + min(min(c[i][2], c[i][5]), c[i][7]); // (0 1 2)(3) / (1 2)(3) / (2)(3)
            sum += min(db1, db2);
        }
        mini = min(mini, sum);

        // 0+2
        sum = r[0]+r[2];
        for(int i=1; i<=m; i++){
            long long db1 = min(c[i][3], c[i][6]); // (0 1 2 3) / (1 2 3)
            long long db2_b = min(min(c[i][1], c[i][5]), min(c[i][4], c[i][2])); // (0 1) / (1 2) / (0 1 2) / (1)
            long long db2_j = min(c[i][8], c[i][9]); // (2 3) / (3)
            sum += min(db1, db2_b + db2_j);
        }
        mini = min(mini, sum);

        // 0+3
        sum = r[0]+r[3];
        for(int i=1; i<=m; i++){
            long long db1 = min(min(c[i][3], c[i][5]), min(c[i][2], c[i][6])); // (0 1 2 3) / (1 2) / (0 1 2) / (1 2 3)
            long long db2 = min(c[i][1], c[i][4]) + min(c[i][7], c[i][8]); // (0 1) / (1) + (2) / (2 3)
            sum += min(db1, db2);
        }
        mini = min(mini, sum);

        // 1+2
        sum = r[1]+r[2];
        for(int i=1; i<=m; i++){
            long long db1 = c[i][3]; // (0 1 2 3)
            long long db2_b = min(min(c[i][0], c[i][1]), c[i][2]); // (0) / (0 1) / (0 1 2)
            long long db2_j = min(min(c[i][6], c[i][8]), c[i][9]); // (1 2 3) / (2 3) / (3)
            sum += min(db1, db2_b + db2_j);
        }
        mini = min(mini, sum);

        // 1+3
        sum = r[1]+r[3];
        for(int i=1; i<=m; i++){
            long long db1 = min(c[i][3], c[i][2]); // (0 1 2 3) / (0 1 2)
            long long db2_b = min(c[i][0], c[i][1]); // (0) / (0 1)
            long long db2_j = min(min(c[i][5], c[i][8]), min(c[i][6], c[i][7])); // (1 2) / (2 3) / (1 2 3) / (2)
            sum += min(db1, db2_b + db2_j);
        }
        mini = min(mini, sum);

        // 2+3
        sum = r[2]+r[3];
        for(int i=1; i<=m; i++){
            long long db1 = min(min(c[i][1], c[i][2]), c[i][3]); // (0 1) / (0 1 2) / (0 1 2 3)
            long long db2 = c[i][0] + min(min(c[i][4], c[i][5]), c[i][6]); // (0)(1) / (0)(1 2) / (0)(1 2 3)
            sum += min(db1, db2);
        }
        mini = min(mini, sum);

        // 0
        sum = r[0];
        for(int i=1; i<=m; i++){
            long long db1 = min(c[i][6], c[i][3]); // (0 1 2 3) / (1 2 3)
            long long db2_van3 = c[i][2] + min(c[i][8], c[i][9]); // (0 1 2)(2 3) / (0 1 2)(3)
            long long db2_csak2 = c[i][8] + min(c[i][1], c[i][5]); // (0 1)(2 3) / (1 2)(2 3)
            long long db2_1_2 = min(c[i][5]+c[i][9], c[i][4]+c[i][8]); // (1 2)(3) / (1)(2 3)
            long long db3 = c[i][7] + c[i][9] + min(c[i][4], c[i][1]); // (0 1)(2)(3) / (1)(2)(3)
            sum += min(min(db1, db3), min(db2_van3, min(db2_csak2, db2_1_2)));
        }
        mini = min(mini, sum);

        // 1
        sum = r[1];
        for(int i=1; i<=m; i++){
            long long db1 = c[i][3]; // (0 1 2 3)
            long long db2_van3a = c[i][2] + min(c[i][8], c[i][9]); // (0 1 2)(2 3) / (0 1 2)(3)
            long long db2_van3b = c[i][6] + min(c[i][0], c[i][1]); // (0)(1 2 3) / (0 1)(1 2 3)
            long long db2_van3ab = c[i][2] + c[i][6]; // (0 1 2)(1 2 3)
            long long db2_nem3 = c[i][8] + min(c[i][0], c[i][1]); // (0)(2 3) / (0 1)(2 3)
            long long db3 = c[i][9] + min(c[i][0], c[i][1]) + min(c[i][5], c[i][7]); // (0)(2)(3) / (0 1)(2)(3) / (0)(1 2)(3) / (0 1)(1 2)(3)
            sum += min(min(db1, db3), min(min(db2_van3a, db2_van3b), min(db2_van3ab, db2_nem3)));
        }
        mini = min(mini, sum);

        // 2
        sum = r[2];
        for(int i=1; i<=m; i++){
            long long db1 = c[i][3]; // (0 1 2 3)
            long long db2_van3a = c[i][2] + min(c[i][8], c[i][9]); // (0 1 2)(2 3) / (0 1 2)(3)
            long long db2_van3b = c[i][6] + min(c[i][0], c[i][1]); // (0)(1 2 3) / (0 1)(1 2 3)
            long long db2_van3ab = c[i][2] + c[i][6]; // (0 1 2)(1 2 3)
            long long db2_nem3 = c[i][1] + min(c[i][8], c[i][9]); // (0 1)(2 3) / (0 1)(3)
            long long db3 = c[i][0] + min(c[i][8], c[i][9]) + min(c[i][4], c[i][5]); // (0)(1)(3) / (0)(1 2)(3) / (0)(1)(2 3) / (0)(1 2)(2 3)
            sum += min(min(db1, db3), min(min(db2_van3a, db2_van3b), min(db2_van3ab, db2_nem3)));
        }
        mini = min(mini, sum);

        // 3
        sum = r[3];
        for(int i=1; i<=m; i++){
            long long db1 = min(c[i][2], c[i][3]); // (0 1 2) / (0 1 2 3)
            long long db2_van3 = c[i][6] + min(c[i][0], c[i][1]); // (0)(1 2 3) / (0 1)(1 2 3)
            long long db2_csak2 = c[i][1] + min(c[i][5], c[i][8]); // (0 1)(1 2) / (0 1)(2 3)
            long long db2_1_2 = min(c[i][0]+c[i][5], c[i][1]+c[i][7]); // (0)(1 2) / (0 1)(2)
            long long db3 = c[i][0] + c[i][4] + min(c[i][7], c[i][8]); // (0)(1)(2) / (0)(1)(2 3)
            sum += min(min(db1, db3), min(db2_van3, min(db2_csak2, db2_1_2)));
        }
        mini = min(mini, sum);

        // nincs
        sum = 0;
        for(int i=1; i<=m; i++){
            long long db1 = c[i][3]; // (0 1 2 3)
            long long db2_van3a = c[i][2] + min(c[i][8], c[i][9]); // (0 1 2)(2 3) / (0 1 2)(3)
            long long db2_van3b = c[i][6] + min(c[i][0], c[i][1]); // (0)(1 2 3) / (0 1)(1 2 3)
            long long db2_van3ab = c[i][2] + c[i][6]; // (0 1 2)(1 2 3)
            long long db2_nem3 = c[i][1] + c[i][8]; // (0 1)(2 3)
            long long db3_harom2 = c[i][1] + c[i][5] + c[i][8]; // (0 1)(1 2)(2 3)
            long long db3_ket2 = min(c[i][1] + c[i][5] + c[i][9], c[i][0] + c[i][5] + c[i][8]); // (0 1)(1 2)(3) / (0)(1 2)(2 3)
            long long db3_egy2 = min(min(c[i][1]+c[i][7]+c[i][9], c[i][0]+c[i][5]+c[i][9]), c[i][0]+c[i][4]+c[i][8]); // (0 1)(2)(3) / (0)(1 2)(3) / (0)(1)(2 3)
            long long db4 = c[i][0] + c[i][4] + c[i][7] + c[i][9]; // (0)(1)(2)(3)
            sum += min(min(db1, min(min(db2_van3a, db2_van3b), min(db2_van3ab, db2_nem3))), min(min(db3_harom2, db3_ket2), min(db3_egy2, db4)));
        }
        mini = min(mini, sum);
    }
    cout << mini << endl;


}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/03ms1876 KiB
2Accepted0/03ms2116 KiB
3Accepted2/2222ms19224 KiB
4Accepted2/23ms2296 KiB
5Accepted3/34ms2748 KiB
6Accepted2/230ms5016 KiB
7Accepted2/2335ms26360 KiB
8Accepted2/2335ms26568 KiB
9Accepted2/2331ms26892 KiB
10Accepted2/2328ms26904 KiB
11Accepted2/2333ms26868 KiB
12Accepted2/2303ms25096 KiB
13Accepted2/2321ms25000 KiB
14Accepted2/2111ms14428 KiB
15Accepted3/3112ms14428 KiB
16Accepted3/3195ms20800 KiB
17Accepted2/2194ms20812 KiB
18Accepted3/3193ms21064 KiB
19Accepted2/2280ms24788 KiB
20Accepted2/2300ms25992 KiB
21Accepted2/2317ms27160 KiB
22Accepted2/2326ms27632 KiB
23Accepted2/2324ms27728 KiB
24Accepted2/2317ms27696 KiB
25Accepted2/2374ms27720 KiB