Cod sursa(job #3362764)

Utilizator CorvinJudge0Corvin Judge CorvinJudge0 Data 12 august 2026 11:42:15
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <bits/stdc++.h>
#define MAXN 16
#define INF 1000000000

using namespace std;

ifstream fin("sobo.in");
ofstream fout("sobo.out");

int dp[(1 << MAXN)], pret[MAXN + 1];
string sob[MAXN];

int main()
{
    int n, l, i, j, mask, mask1, mask0;

    fin >> n >> l;
    for(i = 0; i < (1 << n); i++){
        dp[i] = INF;
    }
    for(i = 0; i < n; i++){
        fin >> sob[i];
        dp[(1 << i)] = 0;
    }
    for(i = 0; i < n; i++){
        fin >> pret[i];
    }
    for(i = 0; i < n; i++){
        cout << sob[i] << "\n";
    }
    cout << sob[0][1] << "\n";

    for(mask = 0; mask < (1 << n); mask++){
        for(i = 0; i < l; i++){
            mask0 = mask1 = 0;
            for(j = 0; j < n; j++){
                if((mask >> 1) & j){
                    if(sob[j][i] == '1'){
    //                    printf("j = %d, i = %d, %c\n", j, i, sob[j][i]);
                        mask1 = mask1 | (1 << j);
                    }else{
    //                    printf("j = %d, %c\n", j, sob[j][i]);
                        mask0 = mask0 | (1 << j);
                    }
                }
            }
//            printf("i = %d, mask = %d, mask1 = %d, mask0 = %d\n", i, mask, mask1, mask0);
            dp[mask] = min(dp[mask], pret[i] + max(dp[mask0], dp[mask1]));
        }
    }
    fout << dp[(1 << n) - 1] << "\n";
    return 0;
}