acwing算法提高之动态规划--数字三角形模型

2023-12-05

1 基础知识

暂无。。。

2 模板

暂无。。。

3 工程化

题目1 :摘花生。

解题思路:DP。

状态定义 f[i][j] :从(1,1)走到(i,j)所摘花生总和。
状态转移,有:

  1. 从上方走到(i,j),有 f[i-1][j] + w[i][j]
  2. 从左侧走到(i,j),有 f[i][j-1] + w[i][j]

C++代码如下,

#include <iostream>

using namespace std;

const int N = 110;
int n, m;
int w[N][N];
int f[N][N];

int main() {
    int t;
    cin >> t;
    while (t--) {
        cin >> n >> m;
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= m; ++j) {
                cin >> w[i][j];
            }
        }
        
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= m; ++j) {
                f[i][j] = max(f[i-1][j], f[i][j-1]) + w[i][j];
            }
        }
        
        cout << f[n][m] << endl;
    }
    
    return 0;
}

题目2 :最低通行费用。N*N的网格,求最低通行费用。

解题思路:DP。

C++代码如下,

#include <iostream>
#include <cstring>

using namespace std;

const int N = 110;
int n;
int a[N][N];
int f[N][N];

int main() {
    cin >> n;
    
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            cin >> a[i][j];
        }
    }
    
    memset(f, 0x3f, sizeof f);
    
    f[1][1] = a[1][1];
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            if (i == 1 & j == 1) continue; //已经被初始化了,无需计算
            f[i][j] = min(f[i-1][j], f[i][j-1]) + a[i][j];
        }
    }
    
    cout << f[n][n] << endl;
    
    return 0;
}

题目3 :方格取数。给定N*N的方格,每个方格中有一个数,从左上角走到右下角,有两个人A和B,方格中的数只能被取一次,求最大值。

解题思路:DP。

状态定义 f[k][i1][i2] :横坐标和纵坐标之和为k,且A走到(i1,k-i1)处,B走到(i2,k-i2)处,该情况下路径之和的最大值。

f[k][i1][i2] 的状态转移,即是求下面4种情况的最大值,

  1. A从上方走到(i1,k-i1),B从上方走到(i2,k-i2),即 f[k-1][i1-1][i2-1] + t
  2. A从上方走到(i1,k-i1),B从左侧走到(i2,k-i2),即 f[k-1][i1-1][i2] + t
  3. A从左侧走到(i1,k-i1),B从上方走到(i2,k-i2),即 f[k-1][i1][i2-1] + t
  4. A从左侧走到(i1,k-i1),B从左侧走到(i2,k-i2),即 f[k-1][i1][i2] + t

其中如果i1不等于i2,那么t等于a[i1][k-i1] + a[i2][k-i2];如果i1等于i2,那么t等于a[i1][k-i1]。

C++代码如下,

#include <iostream>

using namespace std;

const int N = 15;
int n;
int a[N][N];
int f[2 * N][N][N];

int main() {
    cin >> n;
    int i, j, w;
    while (cin >> i >> j >> w, i || j || w) {
        a[i][j] = w;        
    }
    
    for (int k = 2; k <= 2 * n; ++k) {
        for (int i1 = 1; i1 <= k; ++i1) {//i1循环到k
            for (int i2 = 1; i2 <= k; ++i2) {//i2也循环到k
                int t = a[i1][k-i1];
                if (i1 != i2) t += a[i2][k-i2];
                int val1 = max(f[k-1][i1][i2], f[k-1][i1-1][i2-1]);
                int val2 = max(f[k-1][i1][i2-1], f[k-1][i1-1][i2]);
                f[k][i1][i2] = max(val1, val2) + t;
            }
        }
    }
    
    cout << f[2 * n][n][n] << endl;
       
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

acwing算法提高之动态规划--数字三角形模型 的相关文章

随机推荐

  • 一句解决from cryptography.hazmat.bindings._openssl import ffi, libImportError: DLL load failed: 找不到指定的模块

    时隔好久更一篇 转载 真的吊 pip install cryptography force reinstall
  • 信号间歇性和噪声下的复指数频率估计研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 实验1 2 2 实验2
  • 软件测试:测试用例&八大要素&模板

    一 通用测试用例八要素 1 用例编号 2 测试项目 3 测试标题 4 重要级别 5 预置条件 6 测试输入 7 操作步骤 8 预期输出 二 具体分析通用测试用例八要素 1 用例编号 一般是数字和字符组合成的字符串 可以包括 下划线 单词缩写
  • 懒人精灵连接各种|真机|云机|虚拟机|vmos|x8沙箱教程

    1 注册账号 首先打开叮当猫后台注册一个账号 叮当猫后台注册地址 http api privateapi xyz 9000 reg html 脚本管理后台 注册 http api privateapi xyz 9000 reg html 然
  • ABB GJR5252300R3101 07AC91F 自动化模块备件

    ABB GJR5252300R3101 07AC91F 自动化模块备件 ABB GJR5252300R3101 07AC91F 自动化模块备件产品详情 ABB GJR5252300R3101 07AC91F 是一种自动化模块备件 通常用于工
  • 面试官:Java 类的加载过程(生命周期)分为哪几步?

    Java全能学习面试指南 https javaxiaobear cn 说说类加载分几步 需要什么来进行加载 在Java中数据类型分为基本数据类型和引用数据类型 基本数据类型由虚拟机预先定义 引用数据类型则需要进行类的加载 1 Loading
  • 【vue2+element-ui】el-upload封装多图上传组件

    halo小伙伴们 在开发表单中会有遇到需要多图上传 可动态限制上传的图片数量 大小 支持删除 显示提示语的需求 在这小编带来一个小编自封装用了很久的多图上传组件 话不多说上代码 首先创建一个如 XUploadImgList vue的文件 编
  • 走进厦航,体验智能会计时代的业财融合

    12月1日 由用友网络与厦门国家会计学院共同组织的 业财融合高端管理人员培训班 正式开课 此次培训致力于通过产学研共创 服务企业财务管理创新及人才培养 助力企业落地业财融合 走向世界一流 下午 培训班全体学员共同走进中国唯一一家持续盈利36
  • js读取文件路劲并生成xlsx

    const xlsx require node xlsx const fs require fs const path require path fileDisplay url callback param url 你即将读取的文件夹路径
  • 二叉树先中后序遍历-12.4(day12)

    二叉树三种基本遍历方式 先序遍历 从根节点开始 逐级向下遍历 中序遍历 从左子树最后一层的最左侧节点开始遍历 当遍历到根节点后在开始遍历右子树 后续遍历 先访问叶子节点 从左子树到右子树 最后到根节点 记忆方法 先 中 后可以理解为前 中
  • ABB UNS3670A-Z V2 HIEE205011R000 电压转换器

    ABB UNS3670A Z V2 HIEE205011R000是一款电压转换器 通常用于电力系统和工业控制应用中 用于测量和转换电压信号 该电压转换器的主要特点包括 高精度 能够精确地测量和转换电压信号 确保电力系统稳定运行 高稳定性 具
  • 最新最全的Postman接口测试: postman实现参数化

    什么时候会用到参数化 比如 一个模块要用多组不同数据进行测试 验证业务的正确性 Login模块 正确的用户名 密码 成功 错误的用户名 正确的密码 失败 postman 实现参数化 在实际的 接口测试 中 部分参数每次发送请求时都要唯一 比
  • 网盘系统设计:万亿 GB 网盘如何实现秒传与限速?

    Java全能学习面试指南 https javaxiaobear cn 网盘 又称云盘 是提供文件托管和文件上传 下载服务的网站 File hostingservice 人们通过网盘保管自己拍摄的照片 视频 通过网盘和他人共享文件 已经成为了
  • 【有限窗口RLS算法】【自适应滤波器】与指数窗口和滑动窗口RLS算法相当的复杂度实现具有任意有限长度窗口的RLS算法研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • Linux系统配置深度学习环境之cudnn安装

    前言 一个针对深度学习应用优化的 GPU 加速库 它提供了高性能 高可靠性的加速算法 旨在加速深度神经网络模型的训练和推理过程 cuDNN 提供了一系列优化的基本算法和函数 包括卷积 池化 规范化 激活函数等 以及针对深度学习任务的高级功能
  • ABB CI858K01 3BSE018135R1 通讯接口

    ABB CI858K01 3BSE018135R1 通讯接口 产品详情 ABB CI858K01 3BSE018135R1的通讯接口有以下特点 多种通信接口 CI858K01接口模块可能支持多种通信接口 例如以太网 串口 CAN总线等 用于
  • E (1052) : DS树--带权路径和

    文章目录 一 题目描述 二 输入与输出 1 输入 2 输出 三 参考代码 一 题目描述 计算一棵二叉树的带权路径总和 即求赫夫曼树的带权路径和 已知一棵二叉树的叶子权值 该二叉树的带权路径和APL等于叶子权值乘以根节点到叶子的分支数 然后求
  • mixamo根动画导入UE5问题:滑铲

    最近想做一个跑酷游戏 从mixamo下载滑铲动作后 出了很多动画的问题 花了两周时间 终于是把所有的问题基本上都解决了 常见问题 1 动画序列 人物不移动 2 动画序列 人物移动朝向错误 3 蒙太奇 人物移动后会被拉回 4 蒙太奇 动画移动
  • Java架构师技术为业务赋能

    目录 1 概论 2 天猫的难言之隐 3 如何拆解技术难点 三段论 4 天猫线的破局之道 双引擎回归测试框架 5 架构师的心理游戏 解决问题从转换思维开始 6 技术助力业务的两个方向 7 阿里新零售部门如何培养技术团队的业务知识 8 如何围绕
  • acwing算法提高之动态规划--数字三角形模型

    目录 1 基础知识 2 模板 3 工程化 1 基础知识 暂无 2 模板 暂无 3 工程化 题目1 摘花生 解题思路 DP 状态定义 f i j 从 1 1 走到 i j 所摘花生总和 状态转移 有 从上方走到 i j 有 f i 1 j w