Costo mínimo para subir escaleras dp

describir

Dada una matriz de enteros cost , donde cost[i] es el costo de subir el i-ésimo escalón de las escaleras, y el subíndice comienza desde 0. Una vez que pague esta tarifa, puede optar por subir un tramo de escaleras o dos.
Puede elegir comenzar a subir las escaleras desde el escalón con el subíndice 0 o el subíndice 1.
Calcule y devuelva el costo mínimo para llegar a la parte superior de las escaleras.

Rango de datos: la longitud de la matriz satisface 1<= n <= 10^5, y los valores en la matriz satisfacen 1\leqslant n\leqslant 10^4

Introduzca una descripción:

La primera línea ingresa un número entero positivo n, que indica la longitud del costo de la matriz.

La segunda línea ingresa n enteros positivos, que representan el valor del costo de la matriz.

Descripción de salida:

coste mínimo de salida

Ejemplo 1

ingresar:

3

2 5 20

producción:

5

Instrucciones: comenzará en el escalón con el subíndice 1, pagará 5 y subirá dos escalones para llegar a la parte superior de las escaleras. El costo total es 5

Ejemplo 2

ingresar:

10

1 100 1 1 1 90 1 1 80 1

producción:

6

ilustrar:

Comenzará con el paso en el índice 0.

1. Paga 1, sube dos escalones y llega al escalón con subíndice 2.

2. Pague 1, suba dos escalones y llegue al escalón con el subíndice 4.

3. Pague 1, suba dos escalones y llegue al escalón con el subíndice 6.

4. Paga 1, sube un escalón y llega al escalón con el subíndice 7.

5. Pague 1, suba dos escalones y llegue al escalón con el subíndice 9.

6. Pague 1 y suba un escalón para llegar a la parte superior de las escaleras. El costo total es de 6.

 código:

import java.util.*;
import java.util.stream.Collectors;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n=Integer.parseInt(in.nextLine());
        List<Integer> list=Arrays.stream(in.nextLine().split(""))
            .map(Integer::parseInt).collect(Collectors.toList());

        int cost;
        List<Integer> minCosts=new ArrayList<>();
        for(int i=0;i<n;i++){
            if(i<2){
                minCosts.add(0);
            }else{
                int a=list.get(i-2)+minCosts.get(i-2);
                int b=list.get(i-1)+minCosts.get(i-1);
                if(a<=b){
                    minCosts.add(a);
                }else{
                    minCosts.add(b);
                }
            }
        }
        int x=list.get(n-2)+minCosts.get(n-2);
        int y=list.get(n-1)+minCosts.get(n-1);
        if(x<=y){
            cost=x;
        }else{
            cost=y;
        }
        System.out.println(cost);
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_43780761/article/details/126899517
Recomendado
Clasificación