Questa è una domanda da qualche concorso di programmazione (non so esattamente a quale piano di programmazione appartenga, l'ho visto un anno fa). La domanda è la seguente:Trovare altezza comune degli edifici con il costo minimo
ci sono N edifici, ognuno con la propria altezza (non necessariamente unico)
{h1,h2,h3,...,hn}
Dobbiamo fare tutti gli edifici della stessa altezza dire h.
Le operazioni consentite sono:
- possiamo aggiungere un po 'di altezza per un edificio.
- Siamo in grado di rimuovere un po 'di altezza da un edificio.
C'è un costo associato a ciascun edificio per rimuovere/aggiungere un'unità di altezza. Supponiamo che c (i) sia il costo per rimuovere/aggiungere un'altezza unitaria a un edificio. Il rispettivo costo sono i seguenti:
{c1,c2,c3,...,cn}
Supponendo che abbiamo un'altezza sufficiente (unità) a disposizione, dobbiamo trovare il costo minimo, che è necessario per rendere tutti gli edifici della stessa altezza.
Ingresso: Prima riga specificherà N il numero di edifici. (1 = N < = 100000). Second Line of Input sarà per l'altezza degli edifici.
{h1,h2,h3,...,hn}
Terza linea di ingresso darà la matrice costo
{c1,c2,c3.....,cn}
uscita
L'uscita sarà semplicemente il costo minimo richiesto.
ingresso del campione:
3
2 1 3
10 1000 1
Esempio di output
12
Spiegazione: Fare tutti gli edifici di altezza 1, quindi il costo sarà 10 * (2-1) + 1000 * (1-1) + 1 * (3-1) ie 12.
Conosco il metodo della forza bruta che è O (n^2).
Il metodo di forza bruta ho pensato è il seguente:
Qualunque sia la medesima altezza h sia, deve essere dal
{h1,h2,h3,....,hn}
cioè h deve essere uguale su qualsiasi h (i). Ora controllo per ogni h (i) Posso calcolare la risposta in O (n^2).
è possibile farlo più velocemente?
qual è la dimensione dell'input? Dovresti anche approfondire il metodo 'O (n^2)' a cui pensi. Un esempio di input e output migliorerà anche la domanda. – amit
@amit Ha modificato la domanda. –
Modificato la mia soluzione. Dare un'occhiata. Spero che sia d'aiuto ! – user1599964