C#,动态规划(DP)金矿问题(Gold Mine Problem)的算法与源代码

1 金矿问题(Gold Mine Problem)

给定一个N*M尺寸的金矿,每个点都有一个非负数表示当前点所含的黄金数目,最开始矿工位于第一列,但是可以位于任意行。矿工只能向右,右上,右下三个方向移动。问该如何安排路线使得所挖的黄金的数量最多?

2 源程序(2种算法):

using System;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Algorithm_Gallery
    {
        private static int Collect_Gold(int[,] gold, int r, int c, int n, int m)
        {
            // Base condition.
            if ((r < 0) || (r == n) || (c == m))
            {
                return 0;
            }

            int rightUpperDiagonal = Collect_Gold(gold, r - 1, c + 1, n, m);

            int right = Collect_Gold(gold, r, c + 1, n, m);

            int rightLowerDiagonal = Collect_Gold(gold, r + 1, c + 1, n, m);

            return gold[r, 0] + Math.Max(Math.Max(rightUpperDiagonal, rightLowerDiagonal), right);
        }

        public static int Get_Maxium_Gold(int[,] gold)
        {
            int n = gold.GetLength(0);
            int m = gold.GetLength(1);
            int maxGold = 0;
            for (int i = 0; i < n; i++)
            {
                int goldCollected = Collect_Gold(gold, i, 0, n, m);
                maxGold = Math.Max(maxGold, goldCollected);
            }

            return maxGold;
        }

        private static int Collect_Gold(int[,] gold, int r, int c, int n, int m, int[,] dp)
        {
            if ((r < 0) || (r == n) || (c == m))
            {
                return 0;
            }

            if (dp[r, 0] != -1)
            {
                return dp[r, 0];
            }

            int rightUpperDiagonal = Collect_Gold(gold, r - 1, c + 1, n, m, dp);

            int right = Collect_Gold(gold, r, c + 1, n, m, dp);

            int rightLowerDiagonal = Collect_Gold(gold, r + 1, c + 1, n, m, dp);

            return gold[r, 0] + Math.Max(Math.Max(rightUpperDiagonal, rightLowerDiagonal), right);
        }

        public static int Get_Maxium_Gold_Second(int[,] gold)
        {
            int n = gold.GetLength(0);
            int m = gold.GetLength(1);
            int maxGold = 0;
            int[,] dp = new int[n, m];
            for (int row = 0; row < n; row++)
            {
                for (int col = 0; col < m; col++)
                {
                    dp[row, col] = -1;
                }
            }
            for (int i = 0; i < n; i++)
            {
                int goldCollected = Collect_Gold(gold, i, 0, n, m, dp);
                maxGold = Math.Max(maxGold, goldCollected);
            }

            return maxGold;
        }
    }
}
 

3 源程序

using System;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{public static partial class Algorithm_Gallery{private static int Collect_Gold(int[,] gold, int r, int c, int n, int m){// Base condition.if ((r < 0) || (r == n) || (c == m)){return 0;}int rightUpperDiagonal = Collect_Gold(gold, r - 1, c + 1, n, m);int right = Collect_Gold(gold, r, c + 1, n, m);int rightLowerDiagonal = Collect_Gold(gold, r + 1, c + 1, n, m);return gold[r, 0] + Math.Max(Math.Max(rightUpperDiagonal, rightLowerDiagonal), right);}public static int Get_Maxium_Gold(int[,] gold){int n = gold.GetLength(0);int m = gold.GetLength(1);int maxGold = 0;for (int i = 0; i < n; i++){int goldCollected = Collect_Gold(gold, i, 0, n, m);maxGold = Math.Max(maxGold, goldCollected);}return maxGold;}private static int Collect_Gold(int[,] gold, int r, int c, int n, int m, int[,] dp){if ((r < 0) || (r == n) || (c == m)){return 0;}if (dp[r, 0] != -1){return dp[r, 0];}int rightUpperDiagonal = Collect_Gold(gold, r - 1, c + 1, n, m, dp);int right = Collect_Gold(gold, r, c + 1, n, m, dp);int rightLowerDiagonal = Collect_Gold(gold, r + 1, c + 1, n, m, dp);return gold[r, 0] + Math.Max(Math.Max(rightUpperDiagonal, rightLowerDiagonal), right);}public static int Get_Maxium_Gold_Second(int[,] gold){int n = gold.GetLength(0);int m = gold.GetLength(1);int maxGold = 0;int[,] dp = new int[n, m];for (int row = 0; row < n; row++){for (int col = 0; col < m; col++){dp[row, col] = -1;}}for (int i = 0; i < n; i++){int goldCollected = Collect_Gold(gold, i, 0, n, m, dp);maxGold = Math.Max(maxGold, goldCollected);}return maxGold;}}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/266176.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

solidity编程

一.Solidity 简介 Solidity 是⼀种⽤于编写以太坊虚拟机&#xff08; EVM &#xff09;智能合约的 编程语⾔。我认为掌握 Solidity 是参与链上项⽬的必备技 能&#xff1a;区块链项⽬⼤部分是开源的&#xff0c;如果你能读懂代码&#xff0c;就可以 规避很多亏钱项⽬。…

javaweb学习(day04-XML)

一、介绍 1 官方文档 地址: https://www.w3school.com.cn/xml/index.asp 2 为什么需要 XML 需求 1 : 两个程序间进行数据通信需求 2 : 给一台服务器&#xff0c;做一个配置文件&#xff0c;当服务器程序启动时&#xff0c;去读取它应当监听的端口号、还有连接数据库的用户名…

php基础学习之错误处理(其一)

一&#xff0c;错误处理的概念 错误处理指的是系统(或者用户)在执行某些代码的时候&#xff0c;发现有错误&#xff0c;就会通过错误处理的形式告知程序员&#xff0c;俗称报错 二&#xff0c;错误分类 语法错误&#xff1a;书写的代码不符合 PHP 的语法规范&#xff0c;语法错…

Qt Android sdk配置报错解决

使用的jdk8总是失败&#xff0c;报错command tools run以及platform sdk等问题。后来主要是设置jdk版本为17&#xff0c;就配置生效了。Android sdk路径可以选用Android Studio自带的&#xff0c;但是也要在Qt中点击“设置SDK”按钮做必要的下载更新等。 编译器这里会自动检测到…

ODOO12设置收发邮件服务器教程

一、设置-技术 二、设置–技术–发件服务器 信息填写完整后&#xff0c;点击‘测试连接’&#xff0c;若提示成功&#xff0c;则发件服务器设置成功。 三、设置–技术–收件服务器 四、设置–参数–系统参数 修改之前的email系统参数&#xff1a; mail.catchall.alias: 收件服…

300分钟吃透分布式缓存(拉钩教育总结)

开篇寄语 开篇寄语&#xff1a;缓存&#xff0c;你真的用对了吗&#xff1f; 你好&#xff0c;我是你的缓存老师陈波&#xff0c;可能大家对我的网名 fishermen 会更熟悉。 我是资深老码农一枚&#xff0c;经历了新浪微博从起步到当前月活数亿用户的大型互联网系统的技术演进…

代码随想录算法训练营 Day29 | LeetCode491.递增子序列、LeetCode46.全排列、LeetCode47.全排列 II

LeetCode491.递增子序列 该题强调与之前的题目的不同在于给的数组顺序不能变换&#xff0c;这就导致了不能用used数组判断与前一个元素是否相同的方法进行去重的操作&#xff0c;因此该题加入了一个set&#xff0c;不和前一个元素比&#xff0c;而是判断之前有没有处理过这个值…

网工内推 | 项目经理,软考证书优先,最高26K,加班补贴

01 龙盈智达 招聘岗位&#xff1a;项目经理 职责描述&#xff1a; 1 根据业务员需求&#xff0c;完成生态圈下账簿中心系统的开发管理工作。 2 负责账簿中心实施过程中的需求调研分析、方案设计、开发测试、系统上线等工作的计划、组织协调、沟通等方面管理工作。 3 完成系统核…

golang学习6,glang的web的restful接口传参

1.get传参 //get请求 返回json 接口传参r.GET("/getJson/:id", controller.GetUserInfo) 1.2.接收处理 package controllerimport "github.com/gin-gonic/gin"func GetUserInfo(c *gin.Context) {_ c.Param("id")ReturnSucess(c, 200, &quo…

RabbitMQ的常见工作模式

Work queues 工作队列模式 模式说明 通过Helloworld工程我们已经能够构建一个简单的消息队列的基本项目&#xff0c;项目中存在几个角色:生产 者、消费者、队列&#xff0c;而对于我们真实的开发中 &#xff0c;对于消息的消费者通过是有多个的。 比如在实现用户注册功能时&…

社区团购小程序有哪些功能 怎么制作开通

​随着社区团购的兴起&#xff0c;越来越多的人开始关注社区团购小程序的制作。社区团购小程序是一种基于移动互联网的新型购物方式&#xff0c;通过小程序&#xff0c;用户可以在社区内方便地参与团购活动&#xff0c;享受到更优惠的价格和更方便的购物体验。下面具体介绍社区…

Vite 构建的 Vue3 项目如何整合 Monaco Editor 代码编辑器

目录 &#x1f981; 一. 前言&#x1f981; 二. 探索过程2.1 安装2.2 配置 Monaco Editor2.3 编写 Monaco Editor 代码编辑器2.3.1 创建 Coding Editor 组件2.3.2 父组件使用 CodingEditor 组件 2.4 效果展示 三. 总结 &#x1f981; 一. 前言 各位好&#xff01;我是&#x1…

【分布式事务 XA模式】MySQL XA模式详解

MYSQL中的XA事务 写在前面1. XA事务的基本原理2. MySQL XA事务操作 写在前面 MySQL 的 5.0.3 版本开始支持XA分布式事务&#xff0c;并且只有innoDB存储引擎支持XA事务。 1. XA事务的基本原理 XA事务本质上是一种基于两阶段提交的分布式事务&#xff0c;分布式事务可以理解成…

R语言数学建模(二)—— tidymodels

R语言数学建模&#xff08;二&#xff09;—— tidymodels 文章目录 R语言数学建模&#xff08;二&#xff09;—— tidymodels前言一、示例数据集二、拆分数据集2.1 拆分数据集的常用方法2.2 验证集2.3 多层次数据2.4 其他需考虑问题 三、parsnip用于拟合模型3.1 创建模型3.2 …

redis启动错误

错误&#xff1a; Creating Server TCP listening socket 127.0.0.1:6379: bind: No error redis-server.exe redis.windows.conf redis-cli.exe shutdown auth "yourpassword"

嵌入式 Linux 下的 LVGL 移植

目录 准备创建工程修改配置修改 lv_drv_conf.h修改 lv_conf.h修改 main.c修改 Makefile 编译运行更多内容 LVGL&#xff08;Light and Versatile Graphics Library&#xff0c;轻量级通用图形库&#xff09;是一个轻量化的、开源的、在嵌入式系统中广泛使用的图形库&#xff0c…

配电房轨道式巡检机器人方案

一、应用背景 在变电站、配电房、开关站等各种室内变配电场所内&#xff0c;由于变配电设备的数量众多、可能存在各类安全隐患&#xff0c;为了保证用电的安全可靠&#xff0c;都要进行日常巡检。 但目前配电房人工巡检方式有以下主要问题&#xff1a; 巡检工作量大、成本高 …

k8s初始化报错 [ERROR CRI]: container runtime is not running: ......

一、环境参数 linux系统为centos7kubernetes版本为v1.28.2containerd版本为1.6.28 二、报错内容 执行初始化命令kubeadm init命令时报错&#xff0c;内容如下 error execution phase preflight: [preflight] Some fatal errors occurred:[ERROR CRI]: container runtime is…

HarmonyOS开发云工程与开发云函数

创建函数 您可直接在DevEco Studio创建函数、编写函数业务代码、为函数配置调用触发器。 1.右击“cloudfunctions”目录&#xff0c;选择“New > Cloud Function”。 2.输入函数名称后&#xff0c;点击“OK”。 函数名称仅支持小写英文字母、数字、中划线&#xff08;-&a…

1.1 编程环境的安装

汇编语言 汇编语言环境部署 第二个运行程序直接双击安装一直下一步即可MASM文件复制到D盘路径下找到dosbox安装路径&#xff1a;C:\Program Files (x86)\DOSBox-0.74找到该文件双击打开它&#xff0c;修改一下窗口大小 把这两行改成如下所示 运行dos&#xff0c;黑框中输入mou…