- 区间最大子段和(最大连续区间和)

动态规划解法:

dp[i]表示以a[i]为结束的最大连续子段和

因为是以a[ i ]为结束且是连续子段 那么
dp[ i ] 要么就是 a[ i ]本身,
要么 就是a[ i ] + 以a[ i-1 ]为结束的最大连续字段和 也就是 a[ i ] + dp[ i - 1 ],
所以 状态转移方程出来了 dp[i] = max( a[i], dp[i-1]+a[i] )
(引用自最大连续区间和算法详解+代码)

#include<iostream>
#include<cstring>
using namespace std;
const int inf=0x3f3f3f3f;
int dp[10003],a[10003];
int main()
{ios::sync_with_stdio(false);int n;while(!(cin>>n).eof()){int i,j;int max1=-inf;memset(dp,0,sizeof(dp));memset(a,0,sizeof(a));for(int i=1;i<=n;i++){cin>>a[i];}for(i=1;i<=n;i++){dp[i]=max(a[i],dp[i-1]+a[i]);max1=max(max1,dp[i]);//cout<<dp[i]<<' ';}cout<<max1<<endl;}return 0;
}

优化:看状态转移方程可以发现,dp[i]只和上一个dp[i-1]有关,所以可以不用数组,用一个变量足矣。

#include<iostream>
using namespace std;
const int inf=0x3f3f3f3f;
int a[10003];
int main()
{ios::sync_with_stdio(false);int n;while(!(cin>>n).eof()){int i,j,dp=0;int max1=-inf;int y=0;for(int i=1;i<=n;i++){cin>>a[i];dp=max(a[i],dp+a[i]);max1=max(max1,dp);}cout<<max1<<endl;}return 0;
}

- 最大子矩阵和

给出一个m×n的矩阵,请输出它的最大子矩阵和。
多测试用例,每个测试用例:

第一行是两个正整数m和n,表示该矩阵的行数和列数。1 < m, n < 400

接下来m行,每行n个整数,空格分隔。

Sample Input
4 4
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2

Sample Output
15

#include<bits/stdc++.h>
using namespace std;
const int maxn = 402;
int main()
{int m, n, x;while (~scanf("%d%d", &m, &n)) {int sum[maxn][maxn] = {0}, t, ans = 0;for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {scanf("%d", &x);sum[i][j] = sum[i - 1][j] + x;//前i行j列的前缀和}}for (int i = 1; i <= m; i++) {for (int j = i; j <= m; j++) {t = 0;for (int k = 1; k <= n; k++) {t += sum[j][k] - sum[i - 1][k];if (t < 0) t = 0;if (t > ans) ans = t;}}}printf("%d\n", ans);}return 0;
}

-最大m子段和


#include<bits/stdc++.h>
#define MAXN 200005
#define INF 0x3f3f3f3
using namespace std;
int vis[MAXN], a[MAXN], dp[MAXN];
int main(){int m, n, ans;while(~scanf("%d%d", &n, &m)){int t = 0, sum = 0;memset(vis, 0, sizeof(vis));memset(dp, 0, sizeof(dp));for(int i = 1; i <= n; i++)scanf("%d", &a[i]);for(int i = 1; i <= m; i++){ans = -INF;for(int j = i; j <= n; j++){ //这里j从i开始,因为前面已经分了i-1个区间,至少用了i-1个元素dp[j] = max(dp[j-1] + a[j], vis[j-1] + a[j]);vis[j-1] = ans;ans = max(ans, dp[j]);}}printf("%d\n", ans);}return 0;
}

区间最大子段和 + 最大子矩阵和 + 最大m子段和(DP)相关推荐

  1. 51Nod-1051 最大子矩阵和【最大子段和+DP】

    1051 最大子矩阵和 基准时间限制:2秒 空间限制:131072KB 分值:40难度:4级算法题 一个M*N的矩阵,找到此矩阵的一个子矩阵,并且这个子矩阵的元素的和是最大的,输出这个最大的值. 例如 ...

  2. szu 寒训个人复习第一天 线段树入门单点修改,区间修改,以及线段树的扩展运用[线段树+dp][区间最大公约数]

    寒讯内容有点过多(其实是我太菜了)水一波怕忘了(人老了)**什么是线段树** 线段树是本蒟蒻感觉用处特别大的算法 那么线段树上面的节点表示什么意思呢? 线段树,上面的节点表示一个区间,父亲节点表示的区 ...

  3. 最大子段和动态规划_动态规划解最大子段和问题

    1 动态规划 1.1 基本思想 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题. 与分治法的区别在于,适用于动态规划算法求解的问题,经分解得到的子问题往往不是互相独立的:若用分 ...

  4. java动态规划求最大子段和_动态规划:求最大子段和

    动态规划:求最大子段和 1.题目 2.方法 3.实现代码 //动态规划法求最大子段和 // by 孙琨SealSun at UCAS // 2015.11.20 #include using name ...

  5. SP1043 GSS1 - Can you answer these queries I(线段树,区间最大子段和(静态))

    题目描述 给出了序列A[1],A[2],-,A[N]. (a[i]≤15007,1≤N≤50000).查询定义如下: 查询(x,y)=max{a[i]+a[i+1]+...+a[j]:x≤i≤j≤y} ...

  6. CodeForces - 484E Sign on Fence(主席树区间合并+二分)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,需要回答 mmm 次询问,每次询问的格式如下: lrkl\ r\ kl r k,需要回答区间 [l,r][l,r][l,r] 内,所有长度 ...

  7. SPOJ - GSS3 Can you answer these queries III(线段树+区间合并)

    题目链接:点击查看 题目大意:给出一个长度为n的序列,进行m次操作: 1 x y  查询区间[l,r]中的最大连续子段和 0 x y  将第x个数修改为y 题目分析:因为涉及到单点修改和区间查询等操作 ...

  8. [ZJOI2007]棋盘制作 悬线法dp 求限制下的最大子矩阵

    https://www.luogu.org/problemnew/show/P1169 第一次听说到这种dp的名称叫做悬线法,听起来好厉害 题意是求一个矩阵内的最大01交错子矩阵,开始想的是dp[20 ...

  9. 洛谷 P1115 最大子段和

    [题目链接] 洛谷 P1115 最大子段和 [题目考点] 1. 动态规划:线性动规 最大子段和 [解题思路] 解法1:线性动规 子段或子串指的是序列中连续的多个元素,子序列是指序列中可以不连续的多个元 ...

最新文章

  1. python print 换行_Python小课堂第21课:规整一下我们的输出之打印格式化与字符串...
  2. python三层装饰器-python装饰器的一个妙用
  3. java 中文乱码问题,请注意response.getWriter的顺序
  4. Springboot验证表单数据和自定义验证
  5. 不同系统下的shell的不同_方向盘越来越重:转向系统不同 原因也不同
  6. 数据采集标注、模型调参debug…这个神器统统都能搞定!
  7. 练习三十七:对获取数据进行排序
  8. 搜狐视频Redis私有云cachecloud开源了
  9. android listview mapview,RelativeLayout和并列ListView/MapView
  10. lxml学习【未完成】
  11. 10.11 安装pod
  12. netty半包粘包 处理_老王:Netty到底是个什么鬼?有没有简单的理解方式?
  13. 深入浅出推荐系统之简单推荐模型
  14. matlab 中的元组(cell)
  15. Vue:Vue-cli2结合mavonEditor实现MarkDown编辑器
  16. 自己动手写cpu pdf_教你自己动手组装电脑(第一篇:CPU)
  17. python+qqbot实现qq聊天机器人
  18. 校园网站毕业设计,学校网站毕业设计论文模板案例,校园网毕业设计
  19. 1334172-76-7,Biotin-PEG7-amine生物素-PEG试剂,在EDC或HATU活化剂存在下与NHS酯或羧基酸反应
  20. 共射极单管放大器的Multisim仿真实验

热门文章

  1. OpenCV学习6-图像水平翻转、垂直翻转
  2. npm install 报错处理
  3. 阿迪达斯公布新的公司战略“掌控全场”,聚焦三大重点领域
  4. 漏洞复现之xxe漏洞
  5. MySQL Workbench安装教程
  6. 卷积神经网络算法详解
  7. 卷积神经网络最全面的发展简史
  8. Node10.15.0的安装教程
  9. 数据处理(一):python二维插值运算
  10. PLC语音播报器Modbus播报器485播报器