import java.util.Scanner;
public class 上楼梯动态规划问题 {//求最短时间
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int []d=new int [n+1];//每一层楼的高度
for(int i=1;i<d.length;i++){
d[i]=sc.nextInt();//储存高度
}
int [][]dp=new int [n+1][2];
dp[1][1]=d[1];
dp[1][0]=0;
if(n+1>3){
for(int i=2;i<dp.length;i++){
dp[i][0]=Math.min(dp[i-1][1], dp[i-2][1]);
dp[i][1]=Math.min(dp[i-1][0], dp[i-1][1])+d[i];
}
}
System.out.println(Math.min(dp[n][0], dp[n][1]));
}
}
这是一个简单的动态规划问题,也是一种变形的背包问题,这里有一个条件可以跳过去也可以不跳过去,但是,不能连续使用,所以,一开始我准备依靠这个下手,用递归,三种情况分开,来比较时间,但是后来发现,没办法用递归,只能往动态规划上靠,想背包问题的那个状态方程,然后,就从最小里往上加。如代码所示!!!