Ho questo problema (descrizione completa) :
C'è un elenco di argomenti N
e M
.
Devo scoprire il numero massimo di argomenti che una squadra di 2 persone può conoscere. E scopri anche quanti team possono conoscere il numero massimo di argomenti.
2 < = N < = 500
1 < = M < = 500
Ex.
Le righe sono persone, le colonne sono argomenti.
Se c'è 1
la persona conosce quell'argomento, 0
altrimenti.
10101
11100
11010
00101
Il risultato è 5,2
Il mio algoritmo è un'implementazione bruteforce, penso che la complessità sia O (n ^ 3)
vector<bitset<501>> v;
int nMax = 0;
int nMaxCounter = 0;
for(int i=0; i<N; i++) {
for(int j=i+1; j<N; j++){
bitset<501> t = v[i] | v[j];
if(t.count() > nMax) {//t.count() -> returns the number of bits set to true
nMax = t.count();
nMaxCounter = 1;
} else {
if(t.count() == nMax)
nMaxCounter++;
}
}
}
cout<<nMax<<endl;
cout<<nMaxCounter<<endl;
Prima domanda: La complessità è O (n ^ 3)?
Seconda domanda Sei in grado di trovare un algoritmo migliore?