题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1024

(http://www.fjutacm.com/Problem.jsp?pid=1375)

题意:长度为n的序列里,m段不相关区间的最大和

思路:我们先要确定一个东西,就是状态,这里我用dp[i][j]表示前j个数在取a[j]情况下分i段的最大和;

那么我们为了找规律,可以先来一发Excel,就以样例为例子:

然后我们可以发现其实红圈里的8是状态dp[2][6](i=2, j=6),那么我们可以想想这个位置怎么推导,很明显,他可以选择和分i-1块的最大值相加,得到的i块可能是最大,或者他也可以直接和同样分i块的j-1的位置相加,这样就相当于不断开,得到最大。那么也就是他只有两种选择,第一个是dp[i][j-1],第二个是max(dp[i-1][i-1]~dp[i-1][j-1]),也就是dp[i][i~n]只和dp[i-1][i-1~n]这一行的状态有关,和别的无关。那么我们就可以用滚动数组保存;但是如果你找max(dp[i-1][i-1]~dp[i-1][j-1])的时候用的是for查找的话,那就凉凉了,因为那样复杂度就是O(n^3),也就是我们要用一个maxn来记住之前的最大值,然后每次更新记录;具体看代码。

 #include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N= ;
const long long INF=0x3f3f3f3f3f3f3f3f;
long long dp[][N], maxn;
int a[N];
int main( ){
int m, n, t;
while(~scanf("%d%d", &m, &n)){
t=;///用来滚动数组
for(int i=; i<=n; ++i)
dp[][i]=-INF;
for(int i=; i<=n; ++i)
scanf("%d", &a[i]);
for(int i=; i<=m; ++i, t=-t){///t=1-t就是在循环滚动
dp[t][i]=dp[-t][i-]+a[i];///对角线的值其实就是前n项和啦!!
maxn=dp[-t][i-];///别把这个忘了
for(int j=i+; j<=n; ++j){
maxn=max(maxn, dp[-t][j-]);///maxn更新记录max(dp[i-1][i-1]~dp[i-1][j-1])
dp[t][j]=max(dp[t][j-], maxn)+a[j];///状态的转移步骤
}
}
t=-t;///最后i>m时的那一个++i, t=1-t的影响要转过来
maxn=-INF;
/**
注意,dp[i][j]是表示前j个数在取a[j]情况下分i段的最大和;
也就是dp[m%2][n不一定是最优解,因为可能不加a[n]还更大;
**/
for(int i=m; i<=n; ++i)
maxn=max(maxn, dp[t][i]);
printf("%I64d\n", maxn);
}
return ;
}

拙劣的代码

Max Sum Plus Plus (动态规划) HDU1024的更多相关文章

  1. HDOJ 1024 Max Sum Plus Plus -- 动态规划

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1024 Problem Description Now I think you have got an ...

  2. HDU 1024 Max Sum Plus Plus [动态规划+m子段和的最大值]

    Max Sum Plus Plus Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  3. hdu 1024 Max Sum Plus Plus (动态规划)

    Max Sum Plus PlusTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. HDU 1024 Max Sum Plus Plus (动态规划 最大M字段和)

    Problem Description Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To b ...

  5. 杭电60题--part 1 HDU1003 Max Sum(DP 动态规划)

    最近想学DP,锻炼思维,记录一下自己踩到的坑,来写一波详细的结题报告,持续更新. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Problem ...

  6. HDU-1024 Max Sum Plus Plus 动态规划 滚动数组和转移优化

    题目链接:https://cn.vjudge.net/problem/HDU-1024 题意 给n, m和一个序列,找m个不重叠子串,使这几个子串内元素和的和最大. n<=1e6 例:1 3 1 ...

  7. max Sum(简单动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=1003 / 给组测试数据 1 7 2 3 -4 -5 6 7 8 一个关键问题 : 什么时候将开始位置重新赋值 即 ...

  8. HDU 1024 Max Sum Plus Plus (动态规划)

    HDU 1024 Max Sum Plus Plus (动态规划) Description Now I think you have got an AC in Ignatius.L's "M ...

  9. HDOJ-1003 Max Sum(最大连续子段 动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=1003 给出一个包含n个数字的序列{a1,a2,..,ai,..,an},-1000<=ai<=100 ...

随机推荐

  1. Java中线程安全的集合

    如果多线程并发的访问与一个数据结构,那么很容易破坏一个数据结构. 例如,一个线程可能要向一个散列表中插入一条数据的过程中,被剥夺了控制权.如果另外一个线程也开始遍历同一个链表,很可能造成混乱,抛出异常 ...

  2. STM32CubeMX介绍、下载与安装

    一.简介 STM32CubeMX是一个配置STM32代码的工具,它把很多东西封装的比较好,硬件抽象层.中间层.示例代码等.现在ST公司升级和维护的库主要就是STM32CubeMX的HAL库和标准外设库 ...

  3. Stone Game, Why are you always there? HDU - 2999(sg定理)

    题意:给你n个数的集合,表示你每次取石子只能为集合里的数,然后给你一排石子,编号为1~n,每次你可以取相邻位置的连续石子(数量只能为集合里的数),注意石子的位置时不变的,比如把2拿走了,1和3还是不相 ...

  4. Youtube API数据类型

    数据类型 Activitys Activity资源包含了特定频道或用户的所有活动信息,包括打分.分享.喜爱.上传视频等等.每个Activity资源标识出了动作类型.频道或其他资源. Captions ...

  5. BZOJ3522 [Poi2014]Hotel 【树形dp】

    题目链接 BZOJ3522 题解 就是询问每个点来自不同子树离它等距的三个点的个数 数据支持\(O(n^2)\),可以对每个距离分开做 设\(f[i][j]\)表示\(i\)的子树中到\(i\)距离为 ...

  6. BZOJ3601 一个人的数论 【数论 + 高斯消元】

    题目链接 BZOJ3601 题解 挺神的 首先有 \[ \begin{aligned} f(n) &= \sum\limits_{x = 1}^{n} x^{d} [(x,n) = 1] \\ ...

  7. Android 如何从应用返回待机界面(HOME)

    Intent mIntent = new Intent(); mIntent.setAction(Intent.ACTION_MAIN); mIntent.addCategory(Intent.CAT ...

  8. QNX下进程间通信

    https://blog.csdn.net/dh314552189/article/details/87879016 server.cpp #include <stdlib.h> #inc ...

  9. 栈(C语言实现)

    栈是一种线性数据结构,顺序可能是 LIFO(后进先出)或 FILO(先进先出). 堆栈主要有三个基本操作: 1.push,把元素压入栈 2.pop,从栈中弹出元素(同时从栈中移除),最后加入的第一个被 ...

  10. sidecar学习

    1.SideCar的出现 微服务的结构是细粒度的,由多个服务构成,支持不同的服务用不同的语言来编写,比如a服务用python,b服务用java,C服务用php等,我们称为异构语言,那么在利用zuul来 ...