Somma minima del percorso

Data una griglia di altezza h e larghezza w riempita con numeri interi, si vuole trovare un percorso dall’angolo in alto a sinistra all’angolo in basso a destra che minimizzi la somma dei numeri incontrati. È consentito spostarsi solo verso destra o verso il basso.
 
3
2
1
3
1
9
2
3
9
1
5
4

Input

La prima riga dell’input contiene due interi h e w (1 ≤ h, w ≤ 1000).
Le successive h righe contengono w numeri interi separati da spazio , che rappresentano i valori nella griglia .

Output

Il programma deve stampare la somma minima possibile per muoversi dall’angolo in alto a sinistra a quello in basso a destra.

Examples

Input
Output
3 4 3 2 1 3 1 9 2 3 9 1 5 4
15

Explanation

Possiamo seguire il percorso: 3 → 2 → 1 → 2 → 3 → 4
 
Suggerimento 1
Lo stato in un problema di programmazione dinamica può essere rappresentato come un array bidimensionale.
Suggerimento 2
Questo array può rappresentare la soluzione ottimale fino a una certa coordinata (d[r][c] indica il miglior percorso per arrivare alla riga r e colonna c).
 

Perché l’approccio greedy non funziona in questo caso? Immagina di muoverti sempre nella direzione con il valore più piccolo: quale sarebbe il problema?
 

Constraints

Time limit: 3 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue