136102025-01-08 11:21:48AblablablaFestés (50 pont)cpp17Hibás válasz 20/50703ms63024 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;

int megold(int mask, int osz, int sor){
    if(sor == n){
        return megold(mask, osz + 1, 0);
    }
    if(osz >= m){
        return 0;
    }
    if(dp[osz][sor] != -1){
        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);
    }

    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)));
    int ans = INF;

    for(int i = 0; i < (1 << n); i++){
        dp.assign(m, vector<int>(n, -1));
        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/2377ms48944 KiB
4Elfogadva2/22ms316 KiB
5Elfogadva3/37ms820 KiB
6Elfogadva2/263ms6680 KiB
7Időlimit túllépés0/2699ms62844 KiB
8Időlimit túllépés0/2703ms62772 KiB
9Időlimit túllépés0/2685ms62772 KiB
10Időlimit túllépés0/2685ms62772 KiB
11Időlimit túllépés0/2686ms62772 KiB
12Időlimit túllépés0/2694ms57652 KiB
13Időlimit túllépés0/2688ms57652 KiB
14Elfogadva2/2180ms36224 KiB
15Elfogadva3/3181ms36404 KiB
16Elfogadva3/3351ms48696 KiB
17Elfogadva2/2375ms48692 KiB
18Elfogadva3/3349ms48736 KiB
19Időlimit túllépés0/2649ms56620 KiB
20Időlimit túllépés0/2681ms59876 KiB
21Időlimit túllépés0/2686ms62404 KiB
22Időlimit túllépés0/2688ms62776 KiB
23Időlimit túllépés0/2683ms62772 KiB
24Időlimit túllépés0/2679ms63024 KiB
25Időlimit túllépés0/2703ms62844 KiB