#include <stdio.h> #include <string.h> #include <algorithm> using namespace std;
#define N 20
char temp[N+1]; int m, bit[1<<N], tot[N+1], n, map[N], c[N];
void pre() { for(int i = 0; i < (1<<N); i ++) { for(int j = 0; j < N; j ++) { if( (1 << j) & i ) bit[i] ++; } } }
int cmp(int a, int b) {return a > b;}
int main() { pre(); while(scanf("%d", &m), m) { n = N; for(int i = 0; i < N; i ++) { scanf("%s", temp); int tp = 0; for(int j = 0; j < N; j ++) if( temp[j] == '#' ) tp += (1<<j); map[i] = tp; } int cnt = 0; sort(map, map + N, cmp); for(int i = 0; i < N; i ++) if(map[i]) cnt ++; n = cnt; memset(c, 0, sizeof(c)); for(int i = 0; i < N; i ++) { for(int j = 0; j < n; j ++) { if( map[j] & (1<<i) ) c[i] |= (1<<j); } } int num = m, now, ans = 0, best = -1; for(int i = 1; i < (1<<n); i ++) { if( num > bit[i] ) { memset(tot, 0, sizeof(tot)); now = num - bit[i]; for(int j = 0; j < N; j ++) { tot[bit[(c[j] & i)]] ++; } ans = 0; for(int j = N; j >= 0; j --) { while(tot[j] > 0 && now > 0) { now --; ans += j; tot[j] --; } } if(best < ans) best = ans; } } if(best < 0) best = 0; printf("%d\n", best); } }
|