本题的大致意思为给定一个数组,求其分成m个不相交子段和最大值的问题。

解题思路:dp[i][j]表示前j个数分成i组,且j在第i组里的最大值。

dp[i][j] = max{dp[i][j-1]+a[j],dp[i-1][k]+a[j](i-1<=k<=j-1)},前一个表示j与j-1在i组里,后一个表示j单独成组。

但这道题的n很大,空间复杂度太高,所以要用滚动数组。

max( dp[i-1][k] ) 就是上一组 0....j-1 的最大值。我们可以在每次计算dp[i][j]的时候记录下前j个
的最大值 用数组保存下来  下次计算的时候可以用,这样时间复杂度为 n^2.
AC:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int maxn = 10000005;
const int inf = 0x7ffffff;
int n,m,num[maxn],dp[maxn],pre[maxn];int main()
{int MAX;while(scanf("%d%d",&m,&n)!=EOF){for(int i = 1; i <= n; i++){scanf("%d",&num[i]);dp[i] = 0; pre[i] = 0;}for(int i = 1; i <= m; i++){MAX = -inf;for(int j = i; j <= n; j++){dp[j] = max(dp[j-1] + num[j], pre[j-1] + num[j]);pre[j-1] = MAX;MAX = max(MAX,dp[j]);}}printf("%d\n",MAX);}return 0;
}

hdu 1024(滚动数组优化)相关推荐

  1. HDU - 1024 Max Sum Plus Plus 最大m段子段和+滚动数组优化

    给定n个数字,求其中m段的最大值(段与段之间不用连续,但是一段中要连续) 例如:2 5 1 -2 2 3 -1五个数字中选2个,选择1和2 3这两段. dp[i][j]从前j个数字中选择i段,然后根据 ...

  2. dp笔记:关于DP算法和滚动数组优化的思考

    从网上总结了一些dp的套路以及对滚动数组的一些思考,现记录如下,希望以后回顾此类算法时会有所帮助. 目录 1.DP算法经验 1.DP算法核心: 2.DP算法类别以及例题 例1:三步问题 例2:最小路径 ...

  3. 【牛客 - 188D 】愤怒(01滚动数组优化dp,括号匹配方案个数,tricks)

    题干: 小w很生气 小w有一个长为n的括号序列 愤怒小w想把这个括号序列分为两个括号序列 小w想让分为的这两个括号序列同时合法 小w想知道一共有多少种划分方案 (划分的意思是划分为两个子序列) 注意两 ...

  4. 【NOIP2015提高组】子串 区间DP+滚动数组优化

    题意: 有两个仅包含小写英文字母的字符串 A 和 B. 现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一个新的字符串. 请问 ...

  5. 信息学奥赛一本通1267:【例9.11】01背包问题(二维dp与滚动数组优化)

    [题目描述] 一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,. ...

  6. 01背包问题(当有的背包重量是非整数时)的递归(优化成动态规划+再用滚动数组优化)解法+一些动态规划(递归,搜索)的高级技巧

    当背包重量是整数时,动态规划可以用数组存储状态就可以了. 当背包重量是非整数时,用map存储状态就可以了!主要思路:  map(构造函数中参数comp是仿函数(或者叫函数对象))+递归优化(" ...

  7. 2019多校第一场 HDU6578 - Blank(DP,思维,滚动数组优化空间)

    链接:HDU6578 - Blank 题意: 有 n (≤100) 个格子,向其中填入 0.1.2.3 这4个数,但是有 m (≤100) 个限制 限制 l r x :表示 l ~ r 的格子内不同的 ...

  8. 01背包:经典DP问题( 基本/滚动数组(优化)/恰好装满 )

    所谓01背包问题,是指对于一定数量( i )的物品有一个容量为( j )的背包,每个物品都有自己的容量( k ).价值(value).在保证物品容量之和不大于背包容量的前提下,如何选取物品得到最大价值 ...

  9. Palindrome(最长公共子序列 + 滚动数组优化)

    描述 A palindrome is a symmetrical string, that is, a string read identically from left to right as we ...

最新文章

  1. proftpd的搭建以及相关配置
  2. java web shiro_javase和javaweb环境下shiro的搭建
  3. conda init 关闭和重启shell_Linux的/etc/init.d详解
  4. Apache Kafka-生产者_批量发送消息的核心参数及功能实现
  5. mcp2515 芯片驱动总线错误BUG的解决方法(主要无法进入中断bug)
  6. 数据库引起的性能瓶颈应如何优化?
  7. Spring AOP 本质
  8. 02将代码开源到github(不会使用github的来看看吧)
  9. 宁畅定制算力为冰雪训练插上智慧翅膀
  10. OpenCV-Python实战(14)——人脸检测详解(仅需6行代码学会4种人脸检测方法)
  11. mysql -e -f_twitter-不正确的字符串值:'\ xF0 \ x9F \ x8E \ xB6 \ xF0 \ x9F ...'MySQL
  12. Android天天数钱游戏源码
  13. SQL Server 2019基础
  14. 51单片机300个proteus仿真实例下载
  15. 在Virtualbox虚拟机中安装MSDOS(简易教程)
  16. win7怎么把计算机图标下的箭头掉,告诉你win7如何去除快捷方式小箭头
  17. ORAN专题系列-1:什么是开放无线接入网O-RAN
  18. 压电式雨量传感器数字感知降雨量
  19. 拼多多2018校招内推编程题汇总 详解
  20. PHP 7系列版本(7.0、7.1、7.2、7.3、7.4)新特性

热门文章

  1. 神策数据通过中国信通院 SDK 安全评测
  2. TCP/IP协议之网络链接的背后故事
  3. 窥探SnowflakeIdWorker之并发生成唯一ID
  4. 建立适合大数据成功的团队
  5. SCUT个人整理的常见问题
  6. win 8 快捷键大全
  7. recurrence relation in parenthesis placing problem
  8. 管理心得之学术,交通,作息,心态
  9. 看事实风向的网站,做风向建模和出去放风筝,飞无人机的时候可以看一看~
  10. UNITY优化资料收集