136132025-01-08 11:24:27AblablablaFestés (50 pont)cpp17Hibás válasz 20/50541ms128000 KiB
#include <bits/stdc++.h>

using namespace std;

const int INF = 2e9 + 7;

int n, m;
vector<vector<vector<int>>> oszlop;
vector<vector<int>> dp;
vector<vector<vector<bool>>> volt;

int megold(int mask, int osz, int sor){
    if(sor == n){
        return megold(mask, osz + 1, 0);
    }
    if(osz >= m){
        return 0;
    }
    if(volt[mask][osz][sor]){
        return dp[osz][sor];
    }

    int vissza = INF;

    if(mask & (1 << sor)){
        vissza = megold(mask, osz, sor + 1);
    }

    for(int k = sor; k < n; k++){
        int akt = megold(mask, osz, k + 1) + oszlop[osz][sor][k];

        vissza = min(vissza, akt);
    }

    volt[mask][osz][sor] = 1;
    return dp[osz][sor] = vissza;
}

int main()
{
    cin >> n >> m;

    vector<int> sor(n);
    for(int &x : sor) cin >> x;

    oszlop.assign(m, vector<vector<int>>(n, vector<int>(n, 0)));
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            for(int k = j; k < n; k++){
                cin >> oszlop[i][j][k];
            }
        }
    }

    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            for(int k = n - 1; k >= j; k--){
                int a = INF, b = INF, c = oszlop[i][j][k];
                if(j - 1 >= 0){
                    a = oszlop[i][j - 1][k];
                }
                if(k + 1 < n){
                    b = oszlop[i][j][k + 1];
                }

                oszlop[i][j][k] = min(a, min(b, c));
            }
        }
    }

    //dp.assign((1 << n), vector<vector<int>>(m, vector<int>(n, -1)));
    volt.assign((1 << n), vector<vector<bool>>(m, vector<bool>(n, 0)));
    dp.assign(m, vector<int>(n, -1));
    int ans = INF;

    for(int i = 0; i < (1 << n); i++){
        int akt = megold(i, 0, 0);
        for(int j = 0; j < n; j++){
            if(i & (1 << j)){
                akt += sor[j];
            }
        }

        ans = min(ans, akt);
    }

    cout << ans << "\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base20/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Hibás válasz0/2512ms114688 KiB
4Elfogadva2/22ms564 KiB
5Elfogadva3/38ms2100 KiB
6Elfogadva2/293ms19156 KiB
7Futási hiba0/2493ms128000 KiB
8Futási hiba0/2469ms128000 KiB
9Futási hiba0/2493ms128000 KiB
10Futási hiba0/2493ms128000 KiB
11Futási hiba0/2474ms128000 KiB
12Futási hiba0/2448ms128000 KiB
13Futási hiba0/2469ms128000 KiB
14Elfogadva2/2275ms70636 KiB
15Elfogadva3/3277ms70632 KiB
16Elfogadva3/3481ms114568 KiB
17Elfogadva2/2518ms114664 KiB
18Elfogadva3/3527ms114664 KiB
19Futási hiba0/2425ms128000 KiB
20Futási hiba0/2451ms128000 KiB
21Futási hiba0/2488ms128000 KiB
22Futási hiba0/2472ms128000 KiB
23Futási hiba0/2495ms128000 KiB
24Futási hiba0/2465ms128000 KiB
25Futási hiba0/2541ms128000 KiB