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

题目大意:有多组输入,每组一行整数,开头两个数字m,n,接着有n个数字。要求在这n个数字上,m块数字的最大和。比如2 6 -1 4 -2 3 -2 3,就是(4 -2 3)和(3)这两块最大和为8。

解题思路:当成有m层,我们可以设置两个数组dp,mpre。dp[j]记录当前这一层包含a[j]时的最大值(包含a[j]),mpre[j]个记录上一层到第j-1个位置时的最大和(不一定包含a[j])。这样写出状态转移方程dp[j]=max(dp[j-1],mpre[j-1])+a[j]。表示选择接着这一层j上一个+a[j],或这上一层j-1这个位置取最大值的状态+a[j]。

举个例子2 8 -1 4 -2 3 -10 3 -2 3,在i=2,j=8时,此时dp[8]=max(dp[7],mpre[7])。dp[7]=6表示(4 -2 3)+(3 -2)这两块的和,mpre[7]=5表示(4 -2 3)这一块的和,选择dp[8]=dp[7]+a[j]=0相当于(4 -2 3)+(3 -2 3)这两块的和。

推广一下,在第m层时,mpre[j-1]表示在j-1这个位置m-1块的最大和,如果选择mpre[j-1]+a[j]相当于a[j]为一块,mpre[j-1]为m-1块加起来就是j位置m块时的最大值。

同理dp[j-1]是包含了a[j-1]的在j-1这个位置m块的最大和,如果选择dp[j-1]+a[j]相当于a[j],a[j-1]....一直到上一次选择mpre为止算一块(或者到第m-1个,可能没有选择过mpre),前面的有m-1块,加起来也是j位置m块时的最大值。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N=1e6+;
const LL inf=1e18; LL a[N],dp[N],pre[N]; int main(){
int m,n;
while(~scanf("%d%d",&m,&n)){
memset(dp,,sizeof(dp));
memset(pre,,sizeof(pre));
for(int i=;i<=n;i++)
scanf("%lld",&a[i]);
LL tmp;
for(int i=;i<=m;i++){
tmp=-inf;
for(int j=i;j<=n;j++){
dp[j]=max(dp[j-]+a[j],pre[j-]+a[j]);
pre[j-]=tmp;
tmp=max(tmp,dp[j]);
}
}
printf("%lld\n",tmp);
}
return ;
}

最新文章

  1. nginx实时记录请求状态信息( ngx_realtime_request_module)
  2. css3 flex
  3. 解决ubuntu14.04下Qt 5.3.1下的QtCreator fcitx,ibus不能输入中文
  4. hbase与mapreduce集成
  5. MBProgressHUD.h file not found
  6. 在centos 6.5 在virtual box 上 安装增强版工具
  7. D3js
  8. jquery知识 属性 css
  9. 博客搬到了http://xianglong.me
  10. [JLOI2013]删除物品 树状数组
  11. 用ESP8266+android,制作自己的WIFI小车(Android 软件)
  12. JMeter监控服务器CPU、内存的方法
  13. jquery mobile 建wap站
  14. Hadoop记录-切换NN
  15. 【Android】GestureDetector类及其用法
  16. ucore-lab1-练习5report
  17. etcd集群故障处理(转)
  18. python 验证码test
  19. vim上次和下次光标位置
  20. 2018.09.05 bzoj1010: [HNOI2008]玩具装箱toy(斜率优化dp)

热门文章

  1. Static全局变量(函数)与普通的全局变量(函数)的区别
  2. 洛谷 P1486 BZOJ 1503 NOI 2004 郁闷的出纳员 fhq treap
  3. Measure the size of a PostgreSQL table row
  4. POJ2975:Nim(Nim博弈)
  5. java中的null和&quot;&quot;区别------&amp;&amp;与&amp;的区别
  6. HAOI2017游记
  7. 组合计数 &amp;&amp; Stirling数
  8. 「Django」rest_framework学习系列-节流控制
  9. CSS3实现文本垂直排列
  10. Vue2.0中的路由配置