Aceasta solutie am gasit-o si noi in concurs, dar lua TLE.
Din ce am vazut, majoritatea solutiilor se bazeaza pe urmatoarea idee: se sorteaza descrescator celulele dupa valoare. Sa notam vectorul celulelor cu v. Apoi se aplica urmatorul algoritm.
int ans = 0;
for (int i = 0; i < v.size(); i++) {
for (int j = i + 1; j < v.size() && v[j] + v[i] > ans; j++) {
if (celulele i si j respecta conditia manhattan) {
updateaza_ans();
}
}
}
Solutia aceasta ia ~300ms pe testele actuale, dar cred ca poate fi combatuta usor de un test in care D-ul e mic (2 sau 3). Totusi chiar si asa, daca D-ul este mic atunci suma maxima se poate afla brut.
Este asta solutia dorita si de comisie sau exista si o alta rezolvare?