题意:从一个序列中选出分成不交叉的m段 的最大和

解析 : 题目中 1 <= n <=1000000 所以二维数组是不能用了  所以 要想到简化为一维

dp[i][j]表示以i结尾的前i个数 分成j组的最大和  对于一个数A[i] 我们有两种选择,一是与第(i-1)个数在一组 或者 自成一组  ,所以状态方程就出来了

dp[i][j] = max(dp[i-1][j], max(dp[k][j-1] {k| 1<= k <= i-1} ))+A[i];

max(dp[k][j-1] {k| 1<= k <= i-1})表示前i-1个数组成的j-1组的最大值

这道题没有说m是多少  所以比较尴尬。。。 又因为每个状态只与它一个状态有关,那么就用滚动数组好了

maxx = max(maxx, dp[k^1][i-1]);  // 前(i-1)个 分成(k-1)组的最优解

异或^是相同为0,不同为1,可以用^1来转换状态

dp[k][i] = max(dp[k][i-1], maxx) + A[i];

滚动数组讲解:https://www.cnblogs.com/WTSRUVF/p/9210633.html

具体详情见代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const
int maxn =, INF = 0x7fffffff;
int
A[maxn], dp[][maxn];
int
main()
{

int
m, n;
while
(~scanf("%d%d",&m,&n))
{

mem(dp,);
mem(A,);
int
k =; // 初始化为0
for
(int i=; i<=n; i++)
scanf("%d",&A[i]);
int
maxx, ret;
for
(int j=; j<=m; j++)
{

k ^=; //因为只与j和j-1两个状态有关 所以每次都要异或
maxx = dp[k^][j-]; //maxx的意义为 前j-1个数 分成k-1组的最优解 又第j组最小是j个数 所以每次的maxx开始值为 dp[j-1][j-1] 即 dp[k^1][j-1]
dp[k][j] = dp[k^][j-] + A[j]; // 因为选择第i个数,分成i段,所以只能自己成一段,那么只能这样写;
ret = dp[k][j]; //ret 为这些数分成k组后最大的值 开始值为dp[k][j];
for
(int i=j+; i<=n; i++)
{

maxx = max(maxx, dp[k^][i-]);
dp[k][i] = max(dp[k][i-], maxx) + A[i];
ret = max(ret, dp[k][i]);
}
}

printf("%d\n",ret); } return;
}

HUD 1024 Max Sum Plus Plus (滚动数组)的更多相关文章

  1. HDU 1024 Max Sum Plus Plus --- dp+滚动数组

    HDU 1024 题目大意:给定m和n以及n个数,求n个数的m个连续子系列的最大值,要求子序列不想交. 解题思路:<1>动态规划,定义状态dp[i][j]表示序列前j个数的i段子序列的值, ...

  2. hdu1003 1024 Max Sum&Max Sum Plus Plus【基础dp】

    转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4302208.html   ---by 墨染之樱花 dp是竞赛中常见的问题,也是我的弱项orz, ...

  3. 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 ...

  4. HDU 1024 Max Sum Plus Plus(m个子段的最大子段和)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1024 Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/ ...

  5. 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段,然后根据 ...

  6. HDU 1024 max sum plus

    A - Max Sum Plus Plus Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I6 ...

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

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

  8. hdu 1024 Max Sum Plus Plus DP

    Max Sum Plus Plus Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php ...

  9. HDU 1024 Max Sum Plus Plus 简单DP

    这题的意思就是取m个连续的区间,使它们的和最大,下面就是建立状态转移方程 dp[i][j]表示已经有 i 个区间,最后一个区间的末尾是a[j] 那么dp[i][j]=max(dp[i][j-1]+a[ ...

随机推荐

  1. 数据库sql的in操作,解决in的过多

    一个sql的拼写后,服务器会把这个sql传送到数据库服务器执行,一般不在一个物理机上.那么传送需要走网络,包丢失等网络情况就可能出现. 一般情况,一个sql的长度不会很大,但是有种这样的情况.in操作 ...

  2. Mybatis自动生成实体类

    Maven自动生成实体类需要的jar包 一.pom.xml中 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns ...

  3. Sql Server插入数据并返回自增ID,@@IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT的区别(转载)

    预备知识:SQL Server的IDENTITY关键字IDENTITY关键字代表的是一个函数,而不是identity属性.在access里边没有这个函数,所以在access不能用这个语句.语法:ide ...

  4. Luogu4022 CTSC2012 熟悉的文章 广义SAM、二分答案、单调队列

    传送门 先将所有模板串扔进广义SAM.发现作文的\(L0\)具有单调性,即\(L0\)更小不会影响答案,所以二分答案. 假设当前二分的值为\(mid\),将当前的作文放到广义SAM上匹配. 设对于第\ ...

  5. Luogu P1477 [NOI2008]假面舞会

    一道非常神奇的图论题解法无比新奇清新 我们首先把图分成三种情况: 有环的,此时答案一定是环长的因数(否则不能满足题意) 存在入度大于1的DAG图的 一棵树/一条链 很容易发现,最后一种情况想怎么取就怎 ...

  6. ElasticSearch实践系列(二):探索集群

    前言 为了方便ELK的逐步搭建,我们本篇文章先安装Kibana,然后用Kibana的DevTols执行命令.也可以安装elasticsearch-head运行命令. 安装Kibana 参考Instal ...

  7. 记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门)

    0x01 前言 最近在做代码审计的工作中遇到了一个难题,题目描述如下: <?php include 'flag.php'; if(isset($_GET['code'])){ $code = $ ...

  8. Webpack 2 视频教程 007 - 配置 WDS 进行浏览器自动刷新

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  9. CEPH Object Gateway

    参考文档: CEPH OBJECT GATEWAY:http://docs.ceph.com/docs/master/radosgw/ 一.环境准备 1. Ceph Object Gateway框架 ...

  10. Onezero团队第三次站立会议随感

    >首先这是一个关于Android的小应用APP(记账本) >在Java基础薄弱的基础上尝试Android开发,让我感觉力不从心. >说实话本迭代周在程序设计,确实让我头疼,不知道怎么 ...