Dúvida em recursão

Você vai iniciar uma viagem bastante longa. Você inicia a viagem no Km 0 (zero). No seu percurso, existem n hoteis com quilometragens iguais a a1 < a2 < . . . < an , onde cada ai é medido a partir do ponto de Km 0. Os unicos lugares que você pode parar são esses hotéis, mas você não precisa parar em todos. Sua viagem termina no hotel do Km an que é o seu destino. Você idealmente gostaria de viajar 200 Km por dia, mas nem sempre isso é possivel (depende do espaço entre os hotéis). Se você viaja menos de 200 Km em um dia, seu pai reclama que quer chegar logo ao destino final, mas se você viaja mais de 200 Km em um dia, sua mãe reclama que está cansada. Mais especificamente, se você viaja X Km em um dia, você recebe (200 − X)² reclamações. Você deseja planejar sua viagem de forma a minimizar o número de reclamações recebidos e manter sua família em harmonia. Ou seja, minimizar o número total de reclamações recebidas em todos os dias viajados. Escreva um algoritmo que determina a sequência ótima de hotéis em que você deve parar.

Como vocês podem ver posso ter duas reclamações um do pai e outra da mãe. Minha recursão para esse caso ficaria da seguinte forma:

V[i][j] { MIN(a[j]-a[i]-200), se i<j

Meu algoritmo para dois problemas ficou assim:

[code]public class Ex_6_1 {
public static void main(String[] args) {
int[] a = {0,180,130,190,175};
int[][] v = new int[a.length][a.length];
int[][] h = new int[a.length][a.length];

    for (int i = 0; i < v.length; i++) {
        v[i][i] = 0;
    }

    for (int l = 1; l < v.length; l++) {
        //System.out.println();
        for (int i = 0; i < v.length-l; i++) {
            int j = i+l;
            v[i][j] = Math.abs(a[j] - a[i] - 200);
            h[i][j] = -1;

            for (int k = i+1; k <= j; k++) {
                int aux = v[i][k] + v[k][j];
                //System.out.println("Aux: " + aux);
                //System.out.println("v[i][j]: " + v[i][j]);
                if(aux <= v[i][j]){
                    v[i][j] = aux;
                    h[i][j] = k;
                    //System.out.println("Aux: " + aux);
                    //System.out.println("h["+i+"]["+j+"]: " + k);
                }
            }
            //System.out.println("h["+i+"]["+j+"]: " + h[i][j]);
            System.out.println("v["+i+"]["+j+"]: " + v[i][j]);
            //System.out.printf("%d ", v[i][j]);
        }
    }

}[/code]

Então, caso eu tivesse três reclamações, como que minha recursão ficaria?
Pensei em uma mas, não sei se é a correta, a recursão que pensei é da seguinte forma.
A recursão para 3 problemas seria:

MIN(a[j]-a[i]-200+p[i])

Alguém tem uma outra sugestão de como poderia ficar minha recursão?
Desde de ja obrigado pela ajuda.