洛谷 P1115 最大子序和】的更多相关文章

**原题链接** ##题目描述   给出一段序列,选出其中连续且非空的一段使得这段和最大.     **解法**:       1.暴力枚举 时间:O(n^3)       2.简单优化 时间:O(n^2)       3.分治 时间:O(nlogn)       4.DP 时间:O(n) 分析与代码   解法1:暴力枚举 时间:O(n^3)     由题意很容易想到通过枚举子串首尾两端的位置     确定找出不同的子串,并把确定子串中的数逐一     相加求和,从中取最大值暴力解决. 代码 #…
洛谷题目链接 题目赋值出来格式有问题,所以我就只放题目链接了 下面为ac代码 #include<bits/stdc++.h> #define ll long long using namespace std; +; ll a[maxn];//存放输入的数据 ll f[maxn];//用来递推 int main() { ll n; cin>>n; ;i<=n;i++) scanf("%lld",&a[i]);//输入数据 ;i<=n;i++)…
题目:https://www.luogu.org/problemnew/show/P1115 题意: 求给定数组的最大区间和. 思路: $dp[i][0]$表示以1~i的数组,不选i的最大字段和.$dp[i][1]$表示1~i的数组,选了i 的最大字段和. 显然有 $dp[i+1][0] = max(dp[i][0], dp[i][1])$和$dp[i+1][1] = max(dp[i][1] + num[i], num[i])$ 要注意所有的数字都是负数的情况,特判一下. #include<c…
题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度. 第2行包含N个绝对值不大于10000的整数A[i],描述了这段序列. 输出格式: 输入文件maxsum1.out仅包括1个整数,为最大的子段和是多少.子段的最小长度为1. 输入输出样例 输入样例#1: 7 2 -4 3 -1 2 -4 3 输出样例#1: 4 说明 [样例说明]2 -4 3 -1 2 -4 3 [数据规模与约定] 对于…
题目来源 https://www.luogu.org/problemnew/show/P1115 题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 第一行是一个正整数 NN ,表示了序列的长度. 的整数 A_iAi​ ,描述了这段序列. 输出格式: . 输入输出样例 输入样例#1: 7 2 -4 3 -1 2 -4 3 输出样例#1: 4 说明 [样例说明] ,该子段为 3,-1,23,−1,2 . [数据规模与约定] 对于 40\%40% 的数据,有 …
P1115 最大子段和 题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度. 第2行包含N个绝对值不大于10000的整数A[i],描述了这段序列. 输出格式: 输入文件maxsum1.out仅包括1个整数,为最大的子段和是多少.子段的最小长度为1. 输入输出样例 输入样例#1: 7 2 -4 3 -1 2 -4 3 输出样例#1: 4 说明 [样例说明]2 -4 3 -1 2 -4 3…
https://www.luogu.org/problemnew/show/P1115 简单到不想说……dp[i]表示以i为结尾的最大连续和的值. 那么答案肯定就是最大值了.求一次max就可以了. 仔细想想连线性的空间都不需要了. #include<bits/stdc++.h> using namespace std; #define ll long long int n; ]; ]; int main(){ scanf("%d",&n); ;i<n;i++)…
题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度. 第2行包含N个绝对值不大于10000的整数A[i],描述了这段序列. 输出格式: 输入文件maxsum1.out仅包括1个整数,为最大的子段和是多少.子段的最小长度为1. 输入输出样例 输入样例#1: 7 2 -4 3 -1 2 -4 3 输出样例#1: 4 说明 [样例说明]2 -4 3 -1 2 -4 3 [数据规模与约定] 对于…
题目链接: 最大子段和 题目分析: 动态规划O(n)求解,设f[i]表示以i为终点的最大子段和 分两种情况: 若f[i-1]>0,则显然f[i]=f[i-1]+a[i](a[i]必须包含在内) 若f[i-1]<=0,则f[i]=a[i](加上f[i-1]只会让答案更小,对答案没有贡献) 扫一遍就好了,好像有别的一大堆做法(线段树?)不过这个比较优秀 代码: #include<bits/stdc++.h> #define MAXN (200000+5) using namespace…
题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 第一行是一个正整数NN,表示了序列的长度. 第二行包含NN个绝对值不大于1000010000的整数A_iAi​,描述了这段序列. 输出格式: 一个整数,为最大的子段和是多少.子段的最小长度为11. 输入输出样例 输入样例#1: 复制 7 2 -4 3 -1 2 -4 3 输出样例#1: 复制 4 说明 [样例说明] 2,-4,3,-1,2,-4,32,−4,3,−1,2,−4,3中,最大的子段和为4,该子…