Pagini recente » Cod sursa (job #3362680) | Cod sursa (job #3362949) | Cod sursa (job #3362959) | Cod sursa (job #3362843) | Cod sursa (job #3362764)
#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;
}