【动态规划】最长上升子序列、最大子数组和题解及代码实现

简介: 首先进行分析,这题的状态是什么?

Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法......感兴趣就关注我吧!你定不会失望。


🌈个人主页:主页链接


🌈算法专栏:专栏链接


    我会一直往里填充内容哒!


🌈LeetCode专栏:专栏链接


目前在刷初级算法的LeetBook 。若每日一题当中有力所能及的题目,也会当天做完发出


🌈代码仓库:Gitee链接


🌈点击关注=收获更多优质内容🌈


06ac5f86561e4df6a13877f8b195804a.jpg


介绍了动态规划相关的题目与题解.


题目:最长上升子序列


28ad0bfaace241db83943adf13165acf.png


题解:


首先进行分析,这题的状态是什么?


状态为:前i个上升子序列的长度.


属性为:max(因为题目为最长)


所以令dp[i]初始化为1(本身也是一个长度)


之后循环遍历前i个字符,若发现其满足a[j]<a[i] 则更新子序列


状态方程为:dp[i]=max(dp[i],dp[j]+1]

代码实现:


#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010;
int a[N];
int f[N];
int main()
{
    int n=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=n;i++)
    {
        f[i]=1;
        for(int j=1;j<i;j++)
        {
            if(a[i]>a[j])f[i]=max(f[j]+1,f[i]);
        }
    }
    int res=-1e9-100;
    for(int i=1;i<=n;i++)res=max(res,f[i]);
    cout<<res;
}


题目:最大子数组和


a1e0518fd29849c7acb21e58bd604146.png


题解:


拿到题目也首先分析,这题的状态是什么?


找出一个具有最大和的连续数组,细看一下和上面那题十分的像.但这题要求得是连续的子数组


这题似乎也能用滑动窗口来做?


是不能的,因为有负数滑动窗口作左区间的无法判断何时进行缩进.


所以这里的状态为前i个数字中相加子数组的最大值.


也就是每一个dp[i]存储的都是之前的最优解


所以我们要考虑的就是 当前第i位的数字,是用他本身,还是加上之前的dp[i-1]后再加它本身.(本身是一定要加的,不然就不连续了).这就是我们的属性


所以状态方程为 dp[i]=max(nums[i],dp[i-1]+nums[i])

例如:


77df8cd1f11f4b63904aa7a972f3824e.jpg


 e24e00a8ab9a438ab78fbad4719b2c63.jpg


代码实现:


#include <algorithm>
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        vector<int>ans(nums.size()+1);
        if(nums.size()==0)return 0;
        ans[1]=nums[0];
        for(int i=1;i<ans.size();i++)
        {
            ans[i]=nums[i-1];
            ans[i]=max(ans[i],ans[i-1]+nums[i-1]);
        }
        int t=-1e5;
        for(int i=1;i<ans.size();i++)
        {
            if(ans[i]>t)t=ans[i];
        }
        return t;
    }
};


完结撒花:


🌈本篇博客的内容【动态规划:最长上升子序列、最大子数组和题解及代码实现】已经结束。

🌈若对你有些许帮助,可以点赞、关注、评论支持下博主,你的支持将是我前进路上最大的动力。


🌈若以上内容有任何问题,欢迎在评论区指出。若对以上内容有任何不解,都可私信评论询问。


🌈诸君,山顶见!

目录
相关文章
|
存储 分布式计算 数据管理
基于 Apache Hudi + dbt 构建开放的Lakehouse
基于 Apache Hudi + dbt 构建开放的Lakehouse
257 3
|
Ubuntu 网络协议 Linux
使用云服务器第一次实现了我的泰拉瑞亚服务器
使用云服务器实现泰拉瑞亚游戏的联机功能
使用云服务器第一次实现了我的泰拉瑞亚服务器
|
缓存 负载均衡 应用服务中间件
nginx.conf 配置解析及常用配置
nginx.conf 配置解析及常用配置
355 6
java交换两个数字三种方法
java交换两个数字三种方法
789 0
|
存储 JavaScript 前端开发
ES6 中新增的两种数据类型及类型判断 ( 一 )
ES6 中新增的两种数据类型及类型判断 ( 一 )
|
SQL 安全 关系型数据库
Go 语言中的 MySQL 事务操作
在现代应用中,确保数据完整与一致至关重要。MySQL的事务机制提供了可靠保障。本文首先解释了事务的概念及其ACID特性,随后介绍了如何在Go语言中使用`database/sql`包进行MySQL事务操作。通过一个银行转账的例子,演示了如何通过Go开启事务、执行操作并在必要时回滚或提交,确保数据一致性。最后,还讨论了不同事务隔离级别的含义及如何在Go中设置这些级别。通过本文的学习,开发者能更好地掌握MySQL事务的应用。
169 0
|
SQL Java 关系型数据库
MyBatisPlus之基本CRUD、常用注解
MyBatisPlus之基本CRUD、常用注解
349 0
|
存储 机器学习/深度学习 自然语言处理
Mini but Mighty | 简直就是微调ViT神器,有了Mimi微调方法,别的不用选了!又稳又快!
Mini but Mighty | 简直就是微调ViT神器,有了Mimi微调方法,别的不用选了!又稳又快!
368 1
|
图形学
【unity实战】实现一个buff系统(附项目源码)
【unity实战】实现一个buff系统(附项目源码)
1010 0