https://www.hackerrank.com/challenges/sherlock-and-cost/problem
Soluzione
ref: Blog

Bisogna trovare che massimizza la formula sopra. Per massimizzare le differenze, A[i] dovrebbe essere o B[i] o 1, dato che .
Si potrebbe fare brute-force di tutte le possibilità per A[i] usando BFS o DFS, ma con si supera il time limit. Si usa la programmazione dinamica per aggiornare continuamente S[i] e trovare il massimo S[i].
La funzione cost restituisce l’elemento più grande di S.
Aggiornamento di S
A[i] può assumere uno di due valori:
- 1
- B[i]
Lo stesso vale per A[i - 1].
Generalizzando S[i]:
Dato che A[i] ha 2 scelte e A[i - 1] ha anch’esso 2 scelte, per un A[i] fissato ci sono 2 valori possibili di S[i]. I casi per S[i] sono:
- ,
- ,
Con questa ricorrenza, S[i] accumula sequenzialmente le informazioni precedenti per produrre l’S[i] aggiornato.
Codice
https://github.com/naem1023/codingTest/blob/master/dp/hackerrank-sherlock-and-cost.py