描述

【题解】

设f[i][j]表示前i个数字分成了j段的最大子段和。
则f[i][j] = max(f[i-1][j]+a[i] (第i个数字和第j段合在一起),f[k][j-1]+a[i] (第i个数字作为第j段的第一个数字,同时在j-1段的情况中找到和最大的那个))
这样的时间复杂度是$O(m*n^2)$的,代码的写法在代码1中
接下来我们做一些优化。
首先把数组的第二维改成滚动数组。
然后令F[i][j]=max(f[1..i][j]);
这样在做第二层的转移的时候f[i][j]就能直接用F[i-1][j-1]做转移了
当然也不用非得再重开一个新的数组。
在f[i][j]做完转移之后把它改成前缀的最大值就行。(注意一定要做完转移之后再改变,因为f[i][j]在转移的时候用到了f[i-1][j])
这样在做转移的时候就少掉了O(N)的一次枚举了
复杂度变成O(n*m)的了.详见代码2

【代码1】

#include <cstdio>
#include <algorithm>
using namespace std; const int N = 1e6;
const int M = 30; int f[N+10][M+10],a[N+10];
int n,m; int main(){
while (~scanf("%d%d",&m,&n)){
for (int i = 1;i <=n;i++) scanf("%d",&a[i]);
for(int l = 1;l <= m;l++){
for (int i = l;i <= n;i++){
if (i==l){
f[i][l] = f[i-1][l-1]+a[i];
}else{
f[i][l] = f[i-1][l]+a[i];//和第l段合并
//printf("%d ",f[i][l]);
//自己独立成段
for (int k = l-1;k <= i-1;k++)
f[i][l] = max(f[i][l],f[k][l-1]+a[i]);
}
}
}
int ans = f[m][m];
for (int i = m+1;i <= n;i++) ans = max(ans,f[i][m]);
printf("%d\n",ans);
}
return 0;
}

【代码2】

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int N = 1e6;
const int M = 30; int f[N+10][2],a[N+10];
int n,m; int main(){
while (~scanf("%d%d",&m,&n)){
for (int i = 1;i <=n;i++) scanf("%d",&a[i]);
memset(f,0,sizeof f);
for(int l = 1;l <= m;l++){
for (int i = l;i <= n;i++){
if (i==l){
f[i][l&1] = f[i-1][(l-1)&1]+a[i];
}else{
f[i][l&1] = f[i-1][l&1]+a[i];//和第l段合并
//printf("%d ",f[i][l]);
//自己独立成段
f[i][l&1] = max(f[i][l&1],f[i-1][(l-1)&1]+a[i]);
}
}
for (int i = l+1;i <= n;i++)
f[i][l&1] = max(f[i][l&1],f[i-1][l&1]);
}
printf("%d\n",f[n][m&1]);
}
return 0;
}

最新文章

  1. iOS 触摸事件与UIResponder(内容根据iOS编程编写)
  2. Java笔记9-正则表达式
  3. Python实例1
  4. eclipse基础及开发插件
  5. Server.MapPath()获取本机绝对路径
  6. vs212创建mvc3项目,添加ADO.NET实体数据模型时产生 XXXX.Desiger.cs 文件为空
  7. 优化数据页面(18)——标注keyword
  8. Spring Boot 系列教程17-Cache-缓存
  9. hash 和pushState,replaceState
  10. sh: /etc/init.d/sshd: not found Docker中的Alpine镜像安装sshd无法启动
  11. 了解fastadmin标准的控制器模块js的表格事件
  12. day03 Python字典dict的增删查改及常用操作
  13. for循环 while循环 break跳出循环 continue结束本次循环 exit退出整个脚本
  14. BZOJ.4816.[SDOI2017]数字表格(莫比乌斯反演)
  15. linux跑火车的命令sl
  16. Fiddler HTTPS抓包
  17. Extjs相关知识点梳理
  18. Transformer中引用iqd作为数据源的时候数据预览出现乱码
  19. imx6 qt 24bpp RGB
  20. WIP and COST Frequently Used Troubleshooting Scripts (Doc ID 105647.1)

热门文章

  1. IDEA使用Maven搭建JavaWeb项目
  2. spring整合hibernate之买书小测试
  3. selenium.Cookie 转 okhttp3.Cookie
  4. Webx.0-Web3.0:Web3.0
  5. 82、TensorFlow教你如何构造卷积层
  6. html相关操作点
  7. c#网络通信框架networkcomms内核解析之一 消息传送
  8. 高水线 High water mark(HWM)
  9. UVA11134_Fabled Rooks
  10. Django 模型层关系映射