动态规划专项---数字三角形模型


文章目录 

  • 摘花生
  • 最低通行费
  • 方格取数
  • 传纸条

一、摘花生OJ链接

        本题思路:本题是dp问题中比较简单的模型,dp问题考虑方式:状态表示:集合:定义f[i][j]为从(1, 1)到达(i, j)的所有方案,属性:最大值。状态转移:(i, j)从(i-1, j)即上方过来,(i, j)从(i, j-1)即左方过来。当然这一题也可以进行空间压缩的方式求解。f[i][j]只需要用到这一层和上一层的f元素,所以可以压缩成滚动数组。在此之上,还可以直接压缩成一维数组。

#include <bits/stdc++.h>

constexpr int N=110;

int r,c;
int g[N][N];
int f[N][N];//表示所有从(1,1)走到(i,j)的路线的集合,该集合的属性为最大值

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);std::cout.tie(nullptr);
    
    int T;
    std::cin>>T;
    while(T--){
        std::cin>>r>>c;
        for(int i=1;i<=r;i++)
            for(int j=1;j<=c;j++)
                std::cin>>g[i][j];
        
        for(int i=1;i<=r;i++)
            for(int j=1;j<=c;j++)//状态计算分为两种第一种是最后一步是从上面来的,第二种是从左边过来的。
                f[i][j]=std::max(f[i-1][j],f[i][j-1])+g[i][j];
        std::cout<<f[r][c]<<std::endl;
    }
    return 0;
}

二、最低通行费OJ链接

        本题思路:本题与上题一样的思路,要在2*N-1的时间内走完说明不能往回走。然后只需要注意边界条件即可。

#include <bits/stdc++.h>

constexpr int N=110;

int n;
int g[N][N];
int f[N][N];

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);std::cout.tie(nullptr);
    
    std::cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            std::cin>>g[i][j];
    
    memset(f,0x3f,sizeof f);
    f[1][1]=g[1][1];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++){
            f[i][j]=std::min(f[i][j],f[i-1][j]+g[i][j]);
            f[i][j]=std::min(f[i][j],f[i][j-1]+g[i][j]);
        }
    std::cout<<f[n][n]<<std::endl;
    return 0;
}

三、方格取数OJ链接

        本题思路:本题中是走两次,那么状态表示:f[i1,j1,i2,j2]表示所有从(1,1),(1,1)分别走到(i1,j1),(i2,j2)的路径的最大值。由于走两次可以看成是两条路径同时走,因此k表示两条路线当前走到的各自的横纵坐标之和k == i1 + j1 == i2 + j2,注意:只有在i1 + j1 == i2 + j2时,两条路径走到的当前格子才可能重合。这里可以优化将四维状态优化成三维。

#include <bits/stdc++.h>

constexpr int N=15;

int n;
int g[N][N];
int f[N*2][N][N];//思维状态优化成三维,利用横枞坐标的和来解决

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);std::cout.tie(nullptr);
    
    std::cin>>n;
    int a,b,c;
    while(std::cin>>a>>b>>c,a||b||c) g[a][b]=c;
    
    for(int k=2;k<=2*n;k++)
        for(int i1=1;i1<=n;i1++)
            for(int i2=1;i2<=n;i2++){
                int j1=k-i1,j2=k-i2;
                if(j1>=1&&j1<=n&&j2>=1&&j2<=n){//边界条件
                    int t=g[i1][j1];
                    if(i1!=i2) t+=g[i2][j2];//说明此时两个点没有重合
                     int& x=f[k][i1][i2];
                     x=std::max(x,f[k-1][i1-1][i2-1]+t);//下 下
                     x=std::max(x,f[k-1][i1-1][i2]+t);//下 右
                     x=std::max(x,f[k-1][i1][i2-1]+t);//右 下
                     x=std::max(x,f[k-1][i1][i2]+t);//右 右
                }
            }
    std::cout<<f[n*2][n][n]<<std::endl;
    return 0;
}

四、传纸条OJ链接

        本题思路:本题与上面的方格取数是一样的题目。

#include <bits/stdc++.h>

constexpr int N=55;

int m,n;
int g[N][N];
int f[N*2][N][N];//思维状态优化成三维,利用横枞坐标的和来解决

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);std::cout.tie(nullptr);
    
    std::cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            std::cin>>g[i][j];
            
    for(int k=2;k<=m+n;k++)
        for(int i1=1;i1<=n;i1++)
            for(int i2=1;i2<=n;i2++){
                int j1=k-i1,j2=k-i2;
                if(j1>=1&&j1<=m&&j2>=1&&j2<=m){//边界条件
                    int t=g[i1][j1];
                    if(i1!=i2) t+=g[i2][j2];//说明此时两个点没有重合
                     int& x=f[k][i1][i2];
                     x=std::max(x,f[k-1][i1-1][i2-1]+t);//下 下
                     x=std::max(x,f[k-1][i1-1][i2]+t);//下 右
                     x=std::max(x,f[k-1][i1][i2-1]+t);//右 下
                     x=std::max(x,f[k-1][i1][i2]+t);//右 右
                }
            }
    std::cout<<f[n+m][n][n]<<std::endl;
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络八股文

计算机网络八股文 第一章 计算机网络基础 1.1 OSI 七层参考模型及各自功能 七层参考模式是一个抽象的模型体&#xff0c;不仅包括一系列抽象的术语或概念&#xff0c;也包括具体的协议。 &#xff08;物、数、网、传、会、表、应&#xff09; 物理层&#xff1a;主要定义物…

【前段基础入门之】=>CSS3新特性 响应式布局

文章目录 概念媒体查询媒体类型媒体特性媒体运算符 概念 所谓对响应式布局方案的理解&#xff0c;众说纷纭&#xff0c;核心点就是同一套代码在不同尺度屏幕下的布局呈现方式的不同 社区中有很多人分享&#xff0c;并列出了多种实现响应式布局的方案&#xff0c;比如【 rem&…

Spring源码—初识IOC

&#x1f47d;System.out.println(“&#x1f44b;&#x1f3fc;嗨&#xff0c;大家好&#xff0c;我是代码不会敲的小符&#xff0c;双非大四&#xff0c;Java实习中…”); &#x1f4da;System.out.println(“&#x1f388;如果文章中有错误的地方&#xff0c;恳请大家指正&a…

【面试经典150 | 数学】回文数

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;反转一半数字 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本…

【网络安全】伪装IP网络攻击的识别方法

随着互联网的普及和数字化进程的加速&#xff0c;网络攻击事件屡见不鲜。其中&#xff0c;伪装IP的网络攻击是一种较为常见的攻击方式。为了保护网络安全&#xff0c;我们需要了解如何识别和防范这种攻击。 一、伪装IP网络攻击的概念 伪装IP网络攻击是指攻击者通过篡改、伪造I…

HTTPS加密为什么能保证网络安全?

随着互联网的普及和发展&#xff0c;网络安全问题日益严重。为了保护用户的隐私和数据安全&#xff0c;许多网站都采用了HTTPS加密技术。那么&#xff0c;HTTPS加密为什么可以保证网络安全呢&#xff1f; 原因是HTTP协议采用的是数据明文传输方式。用户从客户端浏览器提交数据…

怎样能写好年终总结报告?

年终总结报告是每个企业、部门、团队都必须完成的一项任务。它是对一年来工作的回顾和总结&#xff0c;也是对下一年工作的规划和展望。写好年终总结报告&#xff0c;不仅可以反映出一个人的工作能力和水平&#xff0c;也可以为下一年的工作提供依据和指导。那么&#xff0c;怎…

产品经理的能力模型是什么?

一个产品的成功需要团队成员利用自己的技能共同合作完成。作为团队的核心和产品的主导者&#xff0c;产品经理需要具备一定的能力模型&#xff0c;以更好地完成工作。下面从五个方面进行解答。 首先&#xff0c;产品经理需要具备需求分析的能力。需求是用户在特定场景下产生的欲…

SystemVerilog学习 (10)——线程控制

一、概述 在实际硬件中,时序逻辑通过时钟沿来激活,组合逻辑的输出则随着输人的变化而变化。所有这些并发的活动在Verilog 的寄存器传输级上是通过initial和 always块语句、实例化和连续赋值语句来模拟的。为了模拟和检验这些语句块,测试平台使用许多并发执行的线程。在测试平台…

数据仓库-数仓架构

1 数据仓库建设方法论 1.1 项目背景 数据仓库将建设成为融通全公司数据资产&#xff0c;提供便捷数据分析和数据服务&#xff0c;支持全公司数字化经营与创新。 1.2 数据仓库概述 数据仓库是一个面向主题的、集成的、相对稳定的、反映有历史变化的数据集合&#xff0c;用于…

盘点十大免费低/无代码开发软件,数字化转型看这里

在数字化日益普及的当下&#xff0c;低代码开发技术逐渐受到大众的追捧。这种技术让缺乏编程经验的大众也能轻松创建应用程序和网站。通过直观的图形界面和拖拽功能&#xff0c;用户可以无需编写任何代码&#xff0c;轻松实现自己的开发需求。本文将为您介绍十大免费的低代码开…

Kubernetes Dashboard部署ImagePullBackOff问题处理

通常&#xff0c;出现ImagePullBackOff问题是由于Kubernetes集群无法拉取所需的镜像导致的。解决这个问题的方法通常包括以下步骤&#xff1a; 1. 检查Pod的描述信息&#xff1a; kubectl describe pod/[pod名称] --namespacekubernetes-dashboard 查看Events部分是否有关于…

再推新品,但华为智慧屏还在等一个契机

文 | 智能相对论 作者 | 佘凯文 在智能电动汽车狂潮下&#xff0c;昔日热闹的“智能电视”类市场&#xff08;包括“智慧屏”、“智能屏”、“智慧电视”、“社交电视”等等五花八门的产品&#xff09;愈发冷清——近些年来&#xff0c;家电行业内部呈现出的“分化”越发明显…

PatchMatchNet笔记

PatchMatchNet笔记 1 概述2 PatchmatchNet网络结构图2.1 多尺度特征提取2.2 基于学习的补丁匹配 3 性能评价 PatchmatchNet: Learned Multi-View Patchmatch Stereo&#xff1a;基于学习的多视角补丁匹配立体算法 1 概述 特点   高速&#xff0c;低内存&#xff0c;可以处理…

OpenLayer系列——【一】初识OpenLayer与OpenLayer视图操作

初识OpenLayer 1、初始化地图渲染 安装openlayer依赖 npm i ol首先准备一个容器用来渲染地图 <div id"map" ref"map" style"width: 100%; height: 100%" />导入依赖初始化地图 import ol/ol.css; import OSM from ol/source/OSM.js; …

最新AI创作系统ChatGPT系统运营源码+支持GPT-4多模态模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

浅谈智能安全配电装置应用在银行配电系统中

【摘要】银行是国家重点安全保护部分&#xff0c;关系到社会资金的稳定&#xff0c;也是消防重点单位。消防安全是银行工作的重要组成部分。在银行配电系统中应用智能安全配电装置&#xff0c;可以提高银行的智能控制水平&#xff0c;有效预防电气火灾。 【关键词】银行&#…

Python 集成 Nacos 配置中心

Python 集成 Nacos 配置中心 下载 Nacos 官方 pyhton 库 pip install nacos-sdk-python # 指定国内阿里云镜像源 pip3 install nacos-sdk-python -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com配置 Nacos 相关信息 Global:nacos:port: 8848…

高阶数据结构---树状数组

文章目录 楼兰图腾一个简单的整数问题 一个简单的整数问题2谜一样的牛 一、楼兰图腾OJ链接 二、一个简单的整数问题OJ链接 三、一个简单的整数问题2OJ链接 四、谜一样的牛OJ链接

Redis篇---第四篇

系列文章目录 文章目录 系列文章目录前言一、说一下 Redis 有什么优点和缺点二、Redis 缓存刷新策略有哪些?三、Redis 持久化方式有哪些?以及有什么区别?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…