试题 算法提高 秘密行动JAVA

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]));
}
}
这是一个简单的动态规划问题,也是一种变形的背包问题,这里有一个条件可以跳过去也可以不跳过去,但是,不能连续使用,所以,一开始我准备依靠这个下手,用递归,三种情况分开,来比较时间,但是后来发现,没办法用递归,只能往动态规划上靠,想背包问题的那个状态方程,然后,就从最小里往上加。如代码所示!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值