首页 > 其他分享 >P1115 最大子段和

P1115 最大子段和

时间:2023-02-03 12:13:59浏览次数:65  
标签:最大 子段 int 加上 ans 序列 include P1115

https://www.luogu.com.cn/problem/P1115

动态规划
分析:如果前面的子段加上第i个数是变大的就加上,如果变小
状态表示:f[i]表示到i个数字位置的最大子段和的最大值
状态计算:f[i]分为包含第i个数的子段 和 自己重新开一个子段
状态转移方程: f[i] = max(f[i - 1] + a[i], a[i])
贪心思想:对于可加可不加的数,不如加上。因为加上对答案没有坏处,而如果这个数后面还有一部分能让答案变多,因为本题求的子段是连续子段,不加上的话这两边就连不起来了。所以无脑加就行了。

  • 第一个数为一个有效序列
  • 如果一个数加上上一个有效序列得到的结果比这个数大,那么该数也属于这个有效序列。
  • 如果一个数加上上一个有效序列得到的结果比这个数小,那么这个数单独成为一个新的有效序列
  • 在执行上述处理的过程中实时更新当前有效序列的所有元素之和并取最大值。
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 2e5 + 10;

int n;
int f[N];
int a;
int ans = -1e9;  //注意a的范围是-1e4,所以定义ans为比它小的,否则会出错

int main ()
{
    cin >> n;
    
    for(int i = 1; i <= n; i ++)
    {
        cin >> a;
        f[i] = max(f[i - 1] + a, a);
        ans = max(f[i], ans);
    }
    
    cout << ans << endl;
    
    return 0;
}

标签:最大,子段,int,加上,ans,序列,include,P1115
From: https://www.cnblogs.com/fxc2002/p/17088701.html

相关文章

  • 最大差值
    /***给定一个无序数组,如[3,1,2,4,-7,4,5,-10,2],数组位置不能动,找出其中的两个数min和max,要求其差值是相对最大的。*要求:min所在的位置,必须在max所在的位置之前*举例:......
  • 力扣1423. 可获得的最大点数
    几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。你的点......
  • 力扣654 最大二叉树
    题目:给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归地在最大值左边的子......
  • 1877.minimize-maximum-pair-sum-in-array 数组中最大数对和的最小值
    问题描述1877.数组中最大数对和的最小值解题思路贪心将数组从小到大排序,最小最大配对,次小次大配对,依次配对,结果就是这些配对和的最大值。代码classSolution{publi......
  • NYOJ-448-寻找最大数
    寻找最大数1000 ms | 内存限制:655352请在整数n中删除m个数字,使得余下的数字按原次序组成的新数最大,比如当n=92081346718538,m=10时,则新的最大数是988......
  • 【DFS】LeetCode 124. 二叉树中的最大路径和
    题目链接124.二叉树中的最大路径和思路一个子树内部的最大路径和=左子树提供的最大路径和+根节点值+右子树提供的最大路径和。即dfs(root.left)+root.val+dfs(r......
  • 数据结构-详解优先队列的二叉堆(最大堆)原理、实现和应用-C和Python
    一、堆的基础1.1优先队列和堆优先队列(PriorityQueue):特殊的“队列”,取出元素顺序是按元素优先权(关键字)大小,而非元素进入队列的先后顺序。若采用数组或链表直接实现优......
  • 代码随想录算法训练营day16 | leetcode ● 104.二叉树的最大深度 559.n叉树的最大深
    基础知识二叉树的多种遍历方式,每种遍历方式各有其特点LeetCode104.二叉树的最大深度分析1.0往下遍历深度++,往上回溯深度--classSolution{intdeep=0,max=......
  • 最大子数组和
    给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。constmaxSubArray=(nums=[-......
  • C语言实现查找一组数中的最大和最小值
    查找一组数中的最大、最小值/***查找一组数中的最大数*@paramnums数组指针*@paramstepsizeof(type)*@paramn该组数中有几个数*@return未找到返......