136852025-01-08 12:38:29AblablablaFestés (50 pont)cpp17Hibás válasz 8/50437ms27792 KiB
#include <bits/stdc++.h>

using namespace std;

const int INF = 2e9 + 7;

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

    int ans = 0;
    vector<int> sor(n);
    for(int &x : sor){
        cin >> x;
        ans += x;
    }

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

    for(int j = 0; j < m; j++){
        for(int i = 0; i < n; i++){
            for(int k = n - 1; k >= 0; k--){
                int a = INF, b = INF;

                if(0 < i - 1) a = oszlop[i - 1][j][k];

                if(k + 1 < n) b = oszlop[i][j][k + 1];

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

    vector<vector<int>> dp(n + 1, vector<int>(m, INF));

    for(int mask = 0; mask < (1 << n); mask++){
        dp[n][m - 1] = 0;
        for(int j = m - 1; j >= 0; j--){
            if(j != m - 1){
                dp[n][j] = dp[0][j + 1];
            }

            for(int i = n - 1; i >= 0; i--){

                if(mask & (1 << i)){
                    dp[i][j] = min(dp[i][j], dp[i + 1][j]);
                }

                for(int k = i; k < n; k++){
                    dp[i][j] = min(dp[i][j], dp[k + 1][j] + oszlop[i][j][k]);
                }
            }
        }

        int plusz = 0;
        for(int i = 0; i < n; i++){
            if(mask & (1 << i)){
                plusz += sor[i];
            }
        }

        //cout << mask << " " << dp[0][0] + plusz << "\n";

        /*for(auto x : dp){
            for(int y : x){
                cout << y << " ";
            }
            cout << "\n";
        }*/

        ans = min(ans, dp[0][0] + plusz);
    }

    cout << ans << "\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base8/50
1Elfogadva0/01ms500 KiB
2Elfogadva0/01ms316 KiB
3Hibás válasz0/2261ms22328 KiB
4Hibás válasz0/21ms316 KiB
5Hibás válasz0/34ms668 KiB
6Hibás válasz0/235ms3124 KiB
7Elfogadva2/2397ms27792 KiB
8Elfogadva2/2414ms27756 KiB
9Hibás válasz0/2391ms27604 KiB
10Hibás válasz0/2407ms27700 KiB
11Hibás válasz0/2393ms27700 KiB
12Hibás válasz0/2361ms25308 KiB
13Hibás válasz0/2395ms25404 KiB
14Elfogadva2/2133ms16700 KiB
15Hibás válasz0/3131ms16692 KiB
16Hibás válasz0/3232ms22324 KiB
17Hibás válasz0/2238ms22324 KiB
18Hibás válasz0/3226ms22324 KiB
19Hibás válasz0/2333ms24884 KiB
20Hibás válasz0/2374ms26420 KiB
21Hibás válasz0/2382ms27440 KiB
22Hibás válasz0/2398ms27700 KiB
23Elfogadva2/2386ms27700 KiB
24Hibás válasz0/2391ms27616 KiB
25Hibás válasz0/2437ms27700 KiB