HDU - 1024 Max Sum Plus Plus(区间dp)

2023-11-03

区间dp

题意:在n个数里选出连续的m组数使其和最大

思路:dp[i][j], 表示分i个组时前j个数的最大值

所以有递推方程dp[i][j] = max(dp[i - 1][k] + w[j], dp[i][j-1] + w[j]);

其中k取1.2.3…j - 1;把第j个数当做新的一组或当做上一个组的长度加一取最大,因为考虑到时间是n^3的关系,所以再对方程进行优化

因为dp[i - 1][k]为i - 1组的前j - 1 个数的最大值,所以可以直接将上一组的前k个最大值记下后不断更新,在这里记进了maxl数组;

二维数组前j个数的最大值就失去了意义,可以直接转化为一维, dp[j] 为前j个数组合后的最大值(一定会有第j个数)

代码如下:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int dp[1000005];
int ch[1000005];
int maxl[1000005];
const int INF = 0x7fffffff;
int main()
{
    int n, m;
    int mmax;
    while(cin >> n >> m)
    {
        memset(dp, 0, sizeof(dp));
        memset(maxl, 0, sizeof(maxl));
        memset(ch, 0, sizeof(ch));

        for(int i = 1; i <= m; i++)
        {
            scanf("%d", &ch[i]);
        }
        for(int i = 1; i <= n; i++)
        {
            mmax = -INF;//因为有负数,所以初始为负无穷
            for(int j = i; j <= m; j++)
            {
                dp[j] = max(dp[j - 1] + ch[j], maxl[j - 1] + ch[j]);//这里用的是上一组的maxl的最大值
                maxl[j - 1] = mmax;//更新最大值为本组1到j - 1为止的最大值 因为mmax还未更新, 为j - 1 的最大值
                mmax = max(mmax, dp[j]);//更新最大值为到j的最大值
            }
        }
        printf("%d\n", mmax);
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HDU - 1024 Max Sum Plus Plus(区间dp) 的相关文章

  • 【导航算法】S型速度规划笔记

    S型速度规划笔记 一 S型速度规划逻辑整理 1 根据q1 q0和速度 判断是否在约束条件下 可以规划出S型速度规划 2 假设可以找到合适的S型速度规划 确定相应的参数v max和a max a 判断是否可以达到最大速度 v max 和加速度
  • Acwing 291. 蒙德里安的梦想

    题目分析 摆放方块的时候 先放横着的 再放竖着的 总方案数等于只放横着的小方块的合法方案数 如何判断 当前方案数是否合法 所有剩余位置能否填充满竖着的小方块 可以按列来看 每一列内部所有连续的空着的小方块需要是偶数个 这是一道动态规划的题目
  • 洛谷 P1026 [NOIP2001 提高组] 统计单词个数

    题目描述 给出一个长度不超过 200 的由小写英文字母组成的字母串 该字串以每行 20 个字母的方式输入 且保证每行一定为 20 个 要求将此字母串分成 k 份 且每份中包含的单词个数加起来总数最大 每份中包含的单词可以部分重叠 当选用一个
  • 1746. 经过一次操作后的最大子数组和

    1746 经过一次操作后的最大子数组和 你有一个整数数组 nums 你只能将一个元素 nums i 替换为 nums i nums i 返回替换后的最大子数组和 示例 1 输入 nums 2 1 4 3 输出 17 解释 你可以把 4替换为
  • 动态规划问题——最长上升子序列(LIS)(一)

    原文转载自我的博客benym cn 推荐链接 动态规划问题 最长上升子序列 LIS 二 动态规划问题 最长上升子序列 LIS 三 如 求 2 7 1 5 6 4 3 8 9 的最长上升子序列 我们定义d i i 1 n 来表示前i个数以A
  • LeetCode:动态规划中的子序列问题

    PS 本文是参考代码随想录做的一些笔记 完整版本请戳链接 非常好的教程 本文列举了一些经典题目 特别是编辑距离 基本上的题目解题思路都是一样的 可以说是一个路子 300 最长递增子序列 给你一个整数数组 nums 找到其中最长严格递增子序列
  • 入门级动态规划五步法(斐波那契数)

    1 确定dp数组 dp table 以及下标的含义 2 确定递推公式 3 dp数组如何初始化 4 确定遍历顺序 5 举例推导dp数组 class Solution def fib self n int gt int if n 0 retur
  • Palindrome subsequence【区间DP+冗斥】

    题目链接HDU 4632 题目让我们求给定的一段字符串上回文串的长度 一个数也算是回文串 于是我就想怎样去找其中的规律 我举了些例子 先是从相同的字符串开始举例 aaa 对于aaa dp 1 1 1 dp 2 2 1 dp 1 2 dp 1
  • 备战2023蓝桥国赛-传纸条

    题目描述 解析 这道题想了我好久 一开始我是想假如只走一条路线 从 1 1 走到 m n 这种问题该怎么解决呢 针对这种问题我是设了dp k i j 表示走了k步到达 i j 的好心程度之和的最大值 然后根据这个来写出转移方程来计算 后面就
  • leetcode-动态规划【背包问题】

    背包问题篇 基础背包 416 分割等和子集 1049 最后一块石头的重量ii 494 目标和 474 一和零 完全背包 518 零钱兑换ii 377 组合总和iv 70 爬楼梯 322 零钱兑换 279 完全平方数 139 单词拆分 多重背
  • 洛谷P1028 [NOIP2001 普及组] 数的计算 —— 简单DP+双指针优化

    This way 题意 给出自然数 n n n 要求按如下方式构造数列 只有一个数字 n n n 的数列是一个合法的数列 在一个合法的数列的末尾加入一个自然数 但是这个自然数不能超过该数列最后一项的一半 可以得到一个新的合法
  • leetcode动态规划总结之01背包和完全背包问题

    1 背包问题分类 其中 除了01背包和完全背包外 leetcode题目中好像还没有涉及其他类型的背包 在这里我就不做总结 2 01背包理论 有N件物品和一个最大承载重量为W 的背包 第i件物品的重量是weight i 其价值是value i
  • 字节跳动笔试---字母交换,最多m次

    参考 https blog csdn net cxzzxc123456 article details 79058419 编码题 字符串S由小写字母构成 长度为n 定义一种操作 每次都可以挑选字符串中任意的两个相邻字母进行交换 询问在至多交
  • 特殊类型动归--区间动归与环形动归

    区间动归 某类有序事件中前若干个事件的子答案 不能再支撑状态转移 我们需要去寻找 从某个元素起到另一个元素结束所包含所有的 连续 元素的子答案 作为状态 可以想象 在这个描述下 每个状态会对应于原题序列上的一个区间 区间具有良好的性质 短的
  • HJ103 Redraiment的走法

    Redraiment是走梅花桩的高手 Redraiment可以选择任意一个起点 从前到后 但只能从低处往高处的桩子走 他希望走的步数最多 你能替Redraiment研究他最多走的步数吗 示例 2 5 1 5 4 5 输出 3 说明 6个点的
  • 学习动态规划-子矩阵

    1 全为1的最大正方形 在一个由 0 和 1 组成的二维矩阵内 找到只包含 1 的最大正方形 并返回其面积 来源 221 最大正方形 解题思路 dp i j 表示以matrix i j 为右下角的全1的正方形的最大边长 很明显 当matri
  • 2023华为OD机试真题【最大平分数组/动态规划】

    题目描述 给定一个数组nums 可以将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 最大的平分组个数 输入描述 第一行输入 m 接着输入m个数 表示此数组 数据范围 1 lt M lt 50 1 lt nums i lt 50
  • 华为机试题103-Redraiment的走法

    描述 Redraiment是走梅花桩的高手 Redraiment可以选择任意一个起点 从前到后 但只能从低处往高处的桩子走 他希望走的步数最多 你能替Redraiment研究他最多走的步数吗 数据范围 每组数据长度满足1 n 200 数据大
  • 编程题——连续最大和

    编程题 连续最大和 题目描述 一个数组有 N 个元素 求连续子数组的最大和 例如 1 2 1 和最大的连续子数组为 2 1 其和为 3 输入描述 输入为两行 第一行一个整数n 1 lt n lt 100000 表示一共有n个元素 第二行为n
  • 【算法】【动规】最长递增子序列

    跳转汇总链接 动态规划算法汇总链接 2 1 最长递增子序列 题目链接 给你一个整数数组 nums 找到其中最长严格递增子序列的长度 子序列是由数组派生而来的序列 删除 或不删除 数组中的元素而 不改变其余元素的顺序 例如 3 6 2 7 是

随机推荐

  • 15、Access数据库偏移注入

    前言 本来想好好介绍一下Access数据库的偏移注入 找个目标来试试 但是找了好久都没有找到 又想自己要不在本地搭建一个 额 还是算了吧 没有太多的时间 之后在网上搜索了一些 偏移注入 看看其他人是否有写这个方面的资料 但是非常少 不过还是
  • js数组的方法

    1 push 数组末尾添加 2 unshift 数组头部添加 3 some 4 findIndex 返回数组中满条件的第一个元素的索引 若找不到 返回 1 const ccc 1 2 3 4 const idx ccc findIndex
  • grafana对指标进行组合计算

    在使用Grafana配置图表看板时 我们可能需要对多个查询条件筛选出来的结果进行计算 把计算结果生成最终的图表 此时需要用到transform功能 add field from calculation
  • 2022年高教社杯全国大学生数学建模竞赛-【赛题解析篇】E题:小批量物料的生产安排(附MATLAB代码)

    前言 最近发现一个关于数学建模比较好的专栏 需要的小伙伴可移步 数学建模应用 算法实战案例精讲300篇 持续更新ing 赛题描述 某电子产品制造企业面临以下问题 在多品种小批量的物料生产中 事先无法知道物料的 实际需求量 企业希望运用数学方
  • 二维数组和数组指针

    二维数组 int arr 3 4 每个元素arr 0 arr 1 arr 2 等价于一维数组名 所以也是子数组的首地址 3个一维数组分别有4个元素 二维数组名arr是首地址 可以理解为指向第一个子数组的数组指针 如int p 4 arr 所
  • 【CTR模型】TensorFlow2.0 的 xDeepFM 实现与实战(附代码+数据)

    CTR 系列文章 广告点击率 CTR 预测经典模型 GBDT LR 理解与实践 附数据 代码 CTR经典模型串讲 FM FFM 双线性 FFM 相关推导与理解 CTR深度学习模型之 DeepFM 模型解读 CTR模型 TensorFlow2
  • 特斯拉传记--摘要

    参考 https baike baidu com item E5 B0 BC E5 8F A4 E6 8B 89 C2 B7 E7 89 B9 E6 96 AF E6 8B 89 4481228 fr aladdin 尼古拉 特斯拉 Nik
  • python flask自定义404错误页面

    在用浏览器访问url的时候 如果url不正确会报404错误 默认的404错误太枯燥了 这里我讲述一下如何将404错误页面修改为好看的404页面 1 首先 创建一个我们希望当出现404错误时展示的html页面 这里我随便写一个页面内容不多定义
  • Linux_centos7_文件与目录管理_指令与文件搜寻_(4)_(bird_bro)

    kingarthur localhost pwd home kingarthur Desktop Documents Downloads Music Pictures Public README README 1 README 2 READ
  • 漫话拥塞控制:BBRv3 来啦

    周一 2023 07 31 临近午夜刚准备睡觉 收到 bbr dev 一封邮件 贴出 IETF CCWG 大会链接 IETF117 CCWG 20230725 2200 以及 bbr3 幻灯片 BBRv3 Algorithm Bug Fix
  • android开发三大框架!Android架构师教你如何突破瓶颈,Android篇

    安卓开发大军浩浩荡荡 经过近十年的发展 Android技术优化日异月新 如今Android 11 0 已经发布 Android系统性能也已经非常流畅 可以在体验上完全媲美iOS 但是 到了各大厂商手里 改源码 自定义系统 使得Android
  • c语言 静态函数和普通函数的区别是什么,类函数和普通函数区别 成员函数和普通函数的所有区别...

    1 成员函数和普通函数的所有区别 区别很大 1 成员函数是面向对象的概念 所谓的成员函数 是指一个函数作为类的成员 公有成员 私有成员或者保护成员 2 普通函数一般有两种传递方式 按类型传递和按值传递 也就是传指针和传返回值两种情况 成员函
  • linux----使用rm -rf 删除大文件后磁盘空间并未释放的解决办法

    原文链接 linux 使用rm rf 删除大文件后磁盘空间并未释放的解决办法 1 问题 当发现linux系统中存在大文件 磁盘空间快满了后 一般会使用rm rf xxx 将大文件删除 但是删除后通过df h 发现磁盘空间并未释放 2 解决办
  • React中实现流程图(第三方库)

    React简单实现可拖拽流程图 下载第三方库 react flow yarn add react flow 准备两个文件 1 index tsx 组件入口 2 mock js 测试数据 index tsx文件代码 index js impo
  • Java 根据经纬度 角度 距离求另一个点坐标

    度换成弧度 param Float d 度 return Float 弧度 private static double rad double d return d Math PI 180 0 弧度换成度 param Float x 弧度 r
  • file_include(攻防世界)

    使用php filter 发现不行 猜测应该被过滤了 继续尝试 发现read base64 encode等关键字符被过滤了 了解到php中有两种转换器 发现string被过滤 只能使用convert了 convert 过滤器支持conver
  • Android异常:android.os.NetworkOnMainThreadException

    Android 4 1项目 使用新浪微博分享时报 android os NetworkOnMainThreadException 网上搜索后知道是因为版本问题 在4 0之后在主线程里面执行Http请求都会报这个错 也许是怕Http请求时间太
  • ReferenceError: fetch is not defined

    在使用fetch时 报错fetch is not find 根据https stackoverflow com questions 48433783 referenceerror fetch is not defined的回答 通过安装 使
  • 开源介绍

    一 什么是开源 开源 Open Source 开放源码 被非赢利软件组织 美国的Open Source Initiative协会 注册为认证标记 并对其进行了正式的定义 用于描述那些源码可以被公众使用的软件 并且此软件的使用 修改和发行也不
  • HDU - 1024 Max Sum Plus Plus(区间dp)

    区间dp 题意 在n个数里选出连续的m组数使其和最大 思路 dp i j 表示分i个组时前j个数的最大值 所以有递推方程dp i j max dp i 1 k w j dp i j 1 w j 其中k取1 2 3 j 1 把第j个数当做新的