区间最大子段和 + 最大子矩阵和 + 最大m子段和(DP)
- 区间最大子段和(最大连续区间和)
动态规划解法:
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)相关推荐
- 51Nod-1051 最大子矩阵和【最大子段和+DP】
1051 最大子矩阵和 基准时间限制:2秒 空间限制:131072KB 分值:40难度:4级算法题 一个M*N的矩阵,找到此矩阵的一个子矩阵,并且这个子矩阵的元素的和是最大的,输出这个最大的值. 例如 ...
- szu 寒训个人复习第一天 线段树入门单点修改,区间修改,以及线段树的扩展运用[线段树+dp][区间最大公约数]
寒讯内容有点过多(其实是我太菜了)水一波怕忘了(人老了)**什么是线段树** 线段树是本蒟蒻感觉用处特别大的算法 那么线段树上面的节点表示什么意思呢? 线段树,上面的节点表示一个区间,父亲节点表示的区 ...
- 最大子段和动态规划_动态规划解最大子段和问题
1 动态规划 1.1 基本思想 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题. 与分治法的区别在于,适用于动态规划算法求解的问题,经分解得到的子问题往往不是互相独立的:若用分 ...
- java动态规划求最大子段和_动态规划:求最大子段和
动态规划:求最大子段和 1.题目 2.方法 3.实现代码 //动态规划法求最大子段和 // by 孙琨SealSun at UCAS // 2015.11.20 #include using name ...
- 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} ...
- CodeForces - 484E Sign on Fence(主席树区间合并+二分)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,需要回答 mmm 次询问,每次询问的格式如下: lrkl\ r\ kl r k,需要回答区间 [l,r][l,r][l,r] 内,所有长度 ...
- SPOJ - GSS3 Can you answer these queries III(线段树+区间合并)
题目链接:点击查看 题目大意:给出一个长度为n的序列,进行m次操作: 1 x y 查询区间[l,r]中的最大连续子段和 0 x y 将第x个数修改为y 题目分析:因为涉及到单点修改和区间查询等操作 ...
- [ZJOI2007]棋盘制作 悬线法dp 求限制下的最大子矩阵
https://www.luogu.org/problemnew/show/P1169 第一次听说到这种dp的名称叫做悬线法,听起来好厉害 题意是求一个矩阵内的最大01交错子矩阵,开始想的是dp[20 ...
- 洛谷 P1115 最大子段和
[题目链接] 洛谷 P1115 最大子段和 [题目考点] 1. 动态规划:线性动规 最大子段和 [解题思路] 解法1:线性动规 子段或子串指的是序列中连续的多个元素,子序列是指序列中可以不连续的多个元 ...
最新文章
- python print 换行_Python小课堂第21课:规整一下我们的输出之打印格式化与字符串...
- python三层装饰器-python装饰器的一个妙用
- java 中文乱码问题,请注意response.getWriter的顺序
- Springboot验证表单数据和自定义验证
- 不同系统下的shell的不同_方向盘越来越重:转向系统不同 原因也不同
- 数据采集标注、模型调参debug…这个神器统统都能搞定!
- 练习三十七:对获取数据进行排序
- 搜狐视频Redis私有云cachecloud开源了
- android listview mapview,RelativeLayout和并列ListView/MapView
- lxml学习【未完成】
- 10.11 安装pod
- netty半包粘包 处理_老王:Netty到底是个什么鬼?有没有简单的理解方式?
- 深入浅出推荐系统之简单推荐模型
- matlab 中的元组(cell)
- Vue:Vue-cli2结合mavonEditor实现MarkDown编辑器
- 自己动手写cpu pdf_教你自己动手组装电脑(第一篇:CPU)
- python+qqbot实现qq聊天机器人
- 校园网站毕业设计,学校网站毕业设计论文模板案例,校园网毕业设计
- 1334172-76-7,Biotin-PEG7-amine生物素-PEG试剂,在EDC或HATU活化剂存在下与NHS酯或羧基酸反应
- 共射极单管放大器的Multisim仿真实验