蓝桥杯 跳跃 - 蓝桥云课 (动态规划)

在这里插入图片描述
在这里插入图片描述

原网址:链接: https://www.lanqiao.cn/problems/553/learning/?page=1&first_category_id=1&sort=students_count

仔细阅读题目我们会发现,如果我们以*为起点的话,那么我们就有以下的几种跳跃方案,如下图
在这里插入图片描述
那么如果我们就可以根据这个图逆推出共有哪些点可以跳到*点,如下
在这里插入图片描述
这时我们可以使用动态规划,先将地图数组导入dp数组内,然后将可以跳到*点的dp数组内的数字遍历一遍求出其中的最小值,并与map中的值相加,即可求出跳到该点所花费的最小权值。

import java.util.Scanner;

public class jump {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int m = scan.nextInt();
        int map[][] = new int[n][m];
        int dp[][] = new int[n][m];
        for(int i = 0;i<n;i++){
            for(int j =0;j<m;j++){
                map[i][j] = scan.nextInt();
                dp[i][j] = map[i][j];
            }
        }
        for(int i =0;i<n;i++){
            for(int j =0;j<m;j++){
                if(i==0&&j==0){
                    continue;
                }
                int max = Integer.MIN_VALUE;
                int in = 3;
                for(int q = i;q>-1&&q>=i-3;q--) {
                    for(int w = j;w>-1&&w>=j-in;w--) {
                        if(q==i&&w==j){
                            continue;
                        }
                        if(dp[q][w]>max) {
                            max = dp[q][w];
                        }
                        in--;//使用in参数,控制列的遍历次数
                    }
                }
                dp[i][j] = max + map[i][j];
            }
        }
        System.out.println(dp[n-1][m-1]);
        scan.close();
    }
}

将上述代码运行,得到如下图所示的dp数组
在这里插入图片描述
(完)
周总结:
本题是我第一次自己写出的动态规划算法题,自信心提升不少,但算法之路任重而道远,切不可骄傲急躁。
现在阶段的任务比较繁重,阶段任务完成之前可能不会分配大块大块的时间练习算法了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值