HDU1024 这压缩真先进...先进的我想跳河

HDU1024 题解(DP) HDU1024: 题意:把n个数分出m个区间,使得区间和最大。 思路:DP。状态:dp[i][j]表示把前j个数组分成i组的区间和。 转移方程:dp[i][j] = max(dp[i][j - 1], dp[i - 1][j - 1]) + a[j]; 其中: i - 1 <= k <= j - 1。 ... 阅读详情

Description

Now I think you have got an AC in Ignatius.L’s “Max Sum” problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with a more difficult problem.

Given a consecutive number sequence S 1, S 2, S 3, S 4 … S x, … S n (1 ≤ x ≤ n ≤ 1,000,000, -32768 ≤ S x ≤ 32767). We define a function sum(i, j) = S i + … + S j (1 ≤ i ≤ j ≤ n).

Now given an integer m (m > 0), your task is to find m pairs of i and j which make sum(i 1, j 1) + sum(i 2, j 2) + sum(i 3, j 3) + … + sum(i m, j m) maximal (i x ≤ i y ≤ j x or i x ≤ j y ≤ j x is not allowed).

But I`m lazy, I don’t want to write a special-judge module, so you don’t have to output m pairs of i and j, just output the maximal summation of sum(i x, j x)(1 ≤ x ≤ m) instead. ^_^

Input

Each test case will begin with two integers m and n, followed by n integers S 1, S 2, S 3 … S n.
Process to the end of file.

Output

Output the maximal summation described above in one line.

Sample Input

1 3 1 2 3
2 6 -1 4 -2 3 -2 3

Sample Output

6
8

这个题大意就是说给你一组数,然后告诉你弄出几个子序列他的和最大….
很好这个题最开始我连状态转移方程都想不到
后来好不容易想到了
dp[a][b】=max(dp[a][b-1】+zhi[b] ,max(dp【a-1】)+zhi【b】 )
这个方程还是比较好理解的,那就是dp代表的涵义就是以b为结尾的子序列和……
这玩意是从1开始循环的因此它的连续性是有保障的
他后边那个东西的意思就是前一层a-1个子序列的最大和….
不管他连不连续只要加上就对了嘛….反正子序列缺一个,正好
但是问题又来了…
这个n是一百万,n方百分之百这个空间复杂度要炸到天上去
然后我就开始懵逼
去看了kuangbin大神的题解…
发现确实有好厉害的方法把这个二维数组压缩到一纬数组….
首先我们可以知道这个层数,顶多用两次,第一次是记录下来,第二次是座位上一层使用
然后我们通过状态转移方程可以看出来要被转移方程的那个和max里的第一个数他的层数是完全一样的,那么就可以省掉
问题在于第二个数
这就是kuangbin大神的独特之处了….
他先使用前一个数代表着上一层的最大,用完了以后更新
这样每一层用完了以后更新的值
是把本层作文下一层的上一层来使用的…
像我这种智商的鶸虽然能想到只开三个数组就够用
但是这个循环不变式我是写不出来的…..
然后当循环到最后一层的时候
把最后一层当做出格的一层的上一层来更新…
所以那个maxx就理所当然的变成了最大值…

还要注意一点…那就是内层循环一定从外层循环的值开始
因为你的数不可能比层数还少…
玛德疯狂WA
更可怕的是
这题用long long 会超时!!!!!!!!
卧槽这不是逗我么

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int   dp[1000010];
int  da[1000011];
int  zhi[1000011];
#define INF 0x7fffffff
int main()
{
    int  n,m;
    while (cin >> n >> m)
    {
        memset(dp, 0, sizeof(dp));
        memset(da, 0, sizeof(da));
        for (int a = 1;a <= m;a++)scanf("%d", &zhi[a]);
        int  maxx = 0;
        for (int a = 1;a <=n;a++)
        {
            maxx = -INF;
            for (int b = a;b<=m;b++)
            {
                dp[b] = max(dp[b - 1] + zhi[b], da[b-1] + zhi[b]);//用上一层到b前面的最大来转移
                da[b - 1] = maxx;//用完了上一层的,即开始把本层的数据作为下一次迭代的上一层到b前的最大存好
                maxx = max(maxx, dp[b]);//同理,把本层作为下一层的上一层存好,因此在所有的循环都结束后,这就是最大值;
            }
        }
        cout << maxx << endl;
    }
    return 0;
}
Java 大视界 -- Java+Spark MLlib 构建智能推荐系统:协同过滤算法实战与优化(441) Java+Spark MLlib构建智能推荐系统实战 本文详细介绍了基于Java和Spark MLlib构建协同过滤推荐系统的全流程实践方案。主要内容包括: 架构设计:采用离线批处理为主、近实时更新为辅的架构,包含数据采集层、处理层、模型层、推荐生成层、存储层和应用层六大模块,可支撑千万级用户推荐需求。 技术实现: 使用Spark MLlib的ALS算法进行协同过滤模型训练 提供数据清洗、模型训练、推荐生成等核心代码实现 采用MySQL存储推荐结果,支持批量插入和事务保障 生产级优化: 版本化模型存储规避覆 阅读详情

相关推荐

《Swin-Unet: 类Unet的纯Transformer架构用于医学图像分割》学习笔记

近年来,卷积神经网络(CNN)在医学图像分析领域取得了重要进展。尤其是基于U形架构和跳跃连接的深度神经网络广泛应用于各种医学图像任务。然而,尽管CNN表现优异,但由于卷积操作的局部性,其难以很好地学习全局和长距离语义信息的交互。在本文中,我们提出了Swin-Unet,一种用于医学图像分割的类Unet纯Transformer模型。被切分为Token的图像块输入到基于Transformer的U形编码器-解码器架构中,通过跳跃连接实现局部和全局语义特征的学习。

学无止境。 5547

Max Sum Plus Plus(dp解题)

Max Sum Plus Plus(hdu-1024) 原题描述: Now I think you have got an AC in Ignatius.L’s “Max Sum” problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with a more difficult problem. Given a consecutive number

qq_41678016的博客 1546

永磁同步电机定子槽型设计实战:从梨形槽到矩形槽的NVH优化之路

本文深入探讨了永磁同步电机定子槽型设计在NVH优化中的关键作用,对比了梨形槽与矩形槽的性能差异。通过Ansys Maxwell仿真和实际案例,揭示了矩形槽在提升槽满率、降低电磁噪声方面的优势,并总结了五大设计黄金法则,为电机设计工程师提供了实用指导。

weixin_28740299的博客 493

[线性dp][空间优化]Max Sum Plus Plus HDU1024

Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with a more difficult problem. Given a consecutive number sequence S1, S2, S3, S4... Sx, ....

Cloth的博客 484

brpc组件bvar源码解析(一)简介、使用和类的关系

bvar是brpc中的一个重要组件,brpc内部有很多builtin监控都是bvar实现的。 brpc文档介绍bvar“几乎不会给程序增加性能开销,也快于竞争频繁的原子操作”。它的原理是:多线程累加一个计数器时,每个线程只累加私有的变量而不参与全局竞争,因此写时没有锁的竞争;在读取时累加所有线程的私有变量。虽然读比之前慢多了,但写就快多了,因此它使用写多读少的场景,例如统计、监控场景。 1.使用 // bvar::Adder<T>用于累加,下面定义了一个统计read error总数的Adder。

华秋实的专栏 1852

【 Git学习记录(三)】推荐四款主流的Git代码托管平台 —— GitHub、GitLab、Gitee、Coding

了解过Git之后,作为一个程序猿最基本的,你还需要了解目前主流的在线代码托管平台,并至少选择其中一款在平时开发中使用。这里特别介绍以下四款: 国外平台 GitHub —— 全球最流行的代码托管平台 GitLab —— 基于git的仓库管理程序 国内平台 Gitee —— 开源中国旗下的代码托管平台 Coding —— 支持社交元素的代码托管平台 一. GitHub 链接地址:https://github.com/ GitHub目前是全球最流行的代码托管平台(别称:全球最大的同性交友.

JZevin的博客 6091

《HDU 1024 - Max Sum Plus Plus》的题解

《HDU 1024 - Max Sum Plus Plus》的题解 题目的描述 Now I think you have got an AC in Ignatius.L’s “Max Sum” problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are fac...

weixin_46163391的博客 466

17 指挥AI写Mamba相关模型代码,快速适配大模型场景

本文为《30天掌控AI编程:从指令到落地,手把手教你指挥AI写代码》系列第十七篇,属于第三阶段多场景实战核心内容。本篇聚焦当下大模型领域热门的**Mamba架构**,针对零基础大模型开发、无深度学习基础的使用者,拆解指挥AI生成Mamba基础模型、微调适配、推理部署代码的核心方法,覆盖Mamba基础模块搭建、简易序列建模、小样本微调、本地推理等高频场景,提供可直接复用的高质量指令模板、完整可运行代码、环境配置与避坑指南,无需精通Transformer、状态空间模型等底层原理,轻松上手Mamba大模型开发。

coreopt的博客 61

HDU 1024 Max Sum Plus Plus(最大m子段和)

Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with a more difficult problem. Given ...

蒟蒻小胖 477

小梅哥Xilinx FPGA学习笔记11——亚稳态

亚稳态就是D触发器输入信号在其数据窗口期内发生变化,导致D触发器的输出进入一段时间的不稳定状态,有可能发生振荡,并最终随机稳定在高电平或者低电平。

m0_51430584的博客 631

【Bluedroid】BLE连接过程详解

Bluedroid BLE的链接过程包括扫描、连接和通信三个基本步骤。通过这些步骤,中央设备和外围设备之间可以建立起稳定、高效的通信链路,实现数据传输和控制操作。

byte轻骑兵的技术小窝 1876

dp 题目

Now Ithink you have got an AC in Ignatius. L's "Max Sum" problem. To be abrave ACMer, we always challenge ourselves to more difficult problems. Now youare faced with a more difficult problem. Givena

qq_38630960的博客 263

FanucROBOGUIDE软件二次开发:使用ROBOGUIDEAPI进行编程

菜单栏:位于界面顶部,提供文件、编辑、视图、插入、格式、工具、窗口和帮助等选项。工具栏:包含常用的工具按钮,如新建、打开、保存、运行、停止、机器人控制等。工作站视图:显示工作站的3D模型,用户可以在这里放置机器人、工件、工具和其他设备。机器人控制面板:用于控制机器人运动,包括手动移动、程序编辑和运行。程序编辑器:在这里可以编写和编辑机器人程序,支持Fanuc的R-30iB Plus和R-30iB控制柜的程序格式。状态栏:显示当前工作站的状态信息,如机器人位置、程序状态等。

kkchenjj的博客 1408

Hdu-1024 Max Sum Plus Plus 详解+滚动数组优化

Max Sum Plus Plus Now I think you have got an AC in Ignatius.L’s “Max Sum” problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with a more difficu...

ReverieZH的博客 562

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

hdu1024 Max Sum Plus Plus--DP

原题链接: http://acm.hdu.edu.cn/showproblem.php?pid=1024 一:原题内容 Problem Description Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we always challenge

半壶老酒 752

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Max Sum Plus Plus HDU - 1024

Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with a more difficult problem.  Gi

W-Jarvis把冰雪披戴在肩膀 271

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

动态规划题目一

动态规划练习题一 A - Max Sum Plus Plus Problem Description Now I think you have got an AC in Ignatius.L’s “Max Sum” problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now ...

NaNa 582

HDU1024(最大子段和变式+动态数组)(明天重做)(过一段时间下次看到再重做)

把一个数组分成m段, sum(i1, j1) + sum(i2, j2) + sum(i3, j3) + … + sum(im, jm),求使得上述和最大,ik,jk是连续的jk和ik+1可以不连续 动态规划,d[i][j]表示在选取第j个数字的情况下,将前j个数字分成i组的最大和, 则它的值有两种可能 ①(x1,y1),(x2,y2)…(xi,yi,num[j]) ②(x1,y1),(x2,y2)…(xi-1,yi-1),…,(num[j]),其中yi-1是第k个数字 故:d[i][j]=max(d[.

l1037746466的博客 465

HDU1024(动态规划+滚动数组)

题目大意:把一个数组划分成不相交的m段,使得这m段之和加起来最大。输出最大值。 这道题从题意的分析可知要使用动态规划来做 使用arr[j]来存放第j个数 dp[i][j]的含义:在包含arr[j]的前提下,前i段的最大值,那么我们可以分以下两种情况: 1、arr[j]不是第i段的第一个数,那么此时dp[i][j]就是dp[i][j-1]+arr[j] 2、arr[j]是第i段的第一个个数,那么此...

Joker的博客 379

hdu1024(动态规划+滚动数组优化)

把一个数组分成m段,  sum(i1, j1) + sum(i2, j2) + sum(i3, j3) + ... + sum(im, jm),求使得上述和最大,ik,jk是连续的jk和ik+1可以不连续 动态规划,d[i][j]表示在选取第j个数字的情况下,将前...

弋墨尘的博客 553

HDU1024动态规划(我们不一样)

#include&lt;iostream&gt; #include&lt;algorithm&gt; using namespace std; const int M=1000050; int dp[M]; int dpm[M]; int main() { int m,account,num; while(cin&gt;&gt;m) { cin&gt;&gt...

artistkeepmonkey的博客 417

HDU--1024--段子序列和最大

给定长度为N的序列S。定义sum(i , j) = s[i] + ... + s[j]。给定m,求m段sum(i1, j1) + ... + sum(im,jm)。且没有ix <= iy <=jx。 Input 输入m,输入n。输入n个数。 Output 输出最大和 Sample Input 1 3 1 2 3 2 6 -1 4 -2 3 -2 3 Sample Outpu...

queque_heiya的博客 256

HDU - 1024(DP)

链接:HDU - 1024 题意:给出m,n 和 长度为n的序列,求不相交的m个子区间的最大和 题解:dp[i][j] = max( dp[i][j-1] + a[j], Max( dp[i-1][k] ) + a[j]) {1 #include using namespace std; const int INF = 0x3f3f3f3f; const int maxn =

鬼沐冢 392

hdu1024(基本dp)

/* translation: 给出一串数列,求m个不相交的段最大的和是多少? solution: 基本dp。 设dp[i][j]表示前j个数划分成i段,所得到的最优解。 对于第j个数,有两种决策,一种是单独成立成一个段。另一种是和地i个段组成一段。 所以有转移方程如下:dp[i][j]=max{dp[i][j-1], max{dp[i-1][k]}} + a[i]。其中k>=1 &&

林伏案的博客 499

hdu1024 动态规划

题意是给你个数字序列,现在让你把这个序列分成m个连续的子序列,且要求这m个子序列的累加和最大。 思路:这道题的题意可以理解为问在序列为末尾时,把序列分为m个子序列这个状态时的最大累加和,那么可以得出这个状态应该是由上一个状态转移得来:(因为dp[i][j]表示数到第j个字符时,前j个数字序列被分为i组时的最大值)dp【i][j]=max(dp[i-1][j]+num[j],dp[i][j-1]+...

HPU WIN 757

hdu1024 (滚动数组和动态更新优化)

题意: 给定长度为nnn的序列aaa,从中选取mmm个子段,求子段和的最大值。 题解: f[i][j]f[i][j]f[i][j]表示将前jjj个元素分成iii段可以获得的最大iii段和,其中这里必然包括第jjj个元素。 状态转移为f[i][j]=max(f[i][j−1]+a[j],f[i−1][k]+a[j]),k∈[i−1,j−1]f[i][j]=max(f[i][j-1]+a[j],f[i-1][k]+a[j]),k\in[i-1,j-1]f[i][j]=max(f[i][j−1]+a[j],f[i

solego’s blog 165
上一篇: HDU1950LIS裸题
下一篇: HDU1260简单DP
NineFailure
博客等级 码龄11年 22粉丝 317原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值