首页 > 其他分享 >动态规划---线性dp1

动态规划---线性dp1

时间:2024-04-02 23:56:54浏览次数:22  
标签:10 最大 dp1 int --- 序列 flag 线性 数字

7-3 最大子序列总和

给定 K 个整数序列 { N1, N2, ..., NK }。连续子序列定义为 { Ni, Ni+1, ..., Nj },其中 1 ≤ i ≤ j ≤ K。最大子序列是具有最大元素总和的连续子序列。例如,给定序列 { -2, 11, -4, 13, -5, -2 },其最大子序列为 { 11, -4, 13 },最大和为 20。

现在,您应该找到最大的总和,以及最大子序列的第一个数字和最后一个数字。

输入规格:

每个输入文件都包含一个测试用例。每个案例占用两行。第一行包含正整数 K (≤10000)。第二行包含 K 个数字,用空格分隔。

输出规格:

对于每个测试用例,在一行中输出最大总和,以及最大子序列的第一个和最后一个数字。数字必须用一个空格分隔,但行尾不得有多余的空格。如果最大子序列不唯一,则输出索引 i 和 j 最小的子序列(如示例案例所示)。如果所有 K 个数都是负数,则其最大和被定义为 0,并且您应该输出整个序列的第一个和最后一个数字。

Sample Input:

10
-10 1 2 3 4 -5 -23 3 7 -21

Sample Output:

10 1 4







解答

  • f[i]表示以i结尾的最大字段和
  • l[i]表示这段子段和的左边界,r[i]表示这段子段和的有边界
  • 易错点没考虑到0,最大值没问题,但是边界有问题
#include <iostream>
using namespace std;
const int N = 1e4 + 10;
int a[N], f[N];
int l[N], r[N];
int n;

int main()
{
    cin >> n;
    bool flag = false;
    for(int i = 1; i <= n; i++)
    {
        scanf("%d", &a[i]);
        if(a[i] >= 0) flag = true;
    }

    for(int i = 1; i <= n; i++)
    {
        f[i] = max(f[i - 1] + a[i], a[i]);

        if(f[i] == a[i])
            l[i] = a[i],r[i] = a[i];
        else 
            l[i] = l[i - 1], r[i] = a[i];

        if(f[i - 1] == 0 && i != 1) l[i] = l[i - 1];
    }

    int ans = 0;
    int ll =  0,rr = 0;
    for(int i = 1; i <= n; i++)
    {
        if(f[i] > ans)
        {
            ans = f[i];
            ll = l[i];
            rr = r[i];
        }
    }

    if(flag) cout << ans << " " << ll << " " << rr;
    else cout << 0 << " "<< a[1] << " " << a[n];
    return 0;
}

标签:10,最大,dp1,int,---,序列,flag,线性,数字
From: https://www.cnblogs.com/xingzhuz/p/18111746

相关文章

  • 2024年度4-5月书单-挂书香斋-湖北省随州市广水市印台书院
     书香斋  ......
  • 2024年4月2日-UE5-普通攻击,动画蒙太奇
    创建一个输入,普通攻击 在战斗意境里,添加普通攻击,然后设置鼠标左键是触发按键 在角色总类里面添加普通攻击,把刚才创建的导入进来 找到资源里的攻击动作,把他转换为蒙太奇,用来绑定攻击动作 然后改名 在主角动画蓝图里添加一个插槽,意思是播放之前设置的移动动作中优......
  • 文心一言 vs GPT-4 —— 全面横向比较
    对于文心一言和GPT-4这两者之间的全面横向比较,我们可以从多个方面来看待它们的区别和优劣势。文心一言文心一言是一款基于深度学习的中文文本生成模型,专注于生成优美的古风诗句和语录。以下是它的一些特点:专注于古风诗句和语录:文心一言的主要特点是生成古风风格的诗......
  • 搜索引擎-01-概览
    拓展阅读搜索引擎-01-概览搜索引擎-02-分词与全文索引搜索引擎-03-搜索引擎原理Crawlhtmlunit模拟浏览器动态js爬虫入门使用简介Crawljsoup爬虫使用jsoup无法抓取动态js生成的内容CrawlWebMagic爬虫入门使用简介webmagic详细介绍一下搜索引擎搜索引擎是一种......
  • Mybatis流程分享-II 配置处理,构建environment 信息
    序言通过章节一的讨论,我们知道Mybatis内部对于xml的解析过程具体如下:可以看到,在配置文件的解析过程中其会首先调用SqlSessionFactortyBuilder中的build方法,接着再调用XMLConfigBuilder的parse()方法,并最终返回一个Configuraion对象。进一步,又会调用SqlSessionFactortyBuilde......
  • 动态规划-----线性
    [TJOI2007]线段(洛谷P3842)题目描述在一个\(n\timesn\)的平面上,在每一行中有一条线段,第\(i\)行的线段的左端点是\((i,L_{i})\),右端点是\((i,R_{i})\)。你从\((1,1)\)点出发,要求沿途走过所有的线段,最终到达\((n,n)\)点,且所走的路程长度要尽量短。更具体一些说,你在任......
  • javaweb学习(day11-监听器Listener&&过滤器Filter)
    一、监听器Listener1 Listener介绍Listener监听器它是JavaWeb的三大组件之一。JavaWeb的三大组件分别是:Servlet程序、Listener监听器、Filter过滤器Listener是JavaEE的规范,就是接口监听器的作用是,监听某种变化(一般就是对象创建/销毁,属性变化),触发对应方......
  • 软考 - 系统架构设计师 - 数据流图案例题
    阅读以下关于系统数据分析与建模的叙述,在答题纸上回答问题1至问题3。【说明】        某公司正在研发一套新的库存管理系统。系统中一个关键事件是接收供应商供货。项目组系统分析员小王花了大量时间在仓库观察了整个事件的处理过程,并开发出该过程所执行活动的列表:......
  • Kubernetes(k8s):部署、使用 metrics-server
    Kubernetes(k8s):部署、使用metrics-server一、metrics-server简介二、部署metrics-server2.1、下载MetricsServer部署文件2.2、修改metrics-server.yaml文件2.3、部署MetricsServer2.4、检查MetricsServer三、使用MetricsServer3.1、查看节点使用情况3.2、......
  • Eval-Expression.NET: 在运行时计算、编译和执行C代码和表达式。
    https://www.5axxw.com/wiki/content/8ahrg3 在运行时评估、编译和执行动态C代码和表达式从简单的C数学表达式。。。intresult=Eval.Execute<int>("X+Y",new{X=1,Y=2});要解析的复杂代码。intresult=Eval.Execute<int>(@"varlist=newList<int>(){1......