1917: 【基础】最大部分和(连续部分和)
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:5
解决:4
题目描述
有n个整数(1≤n≤100),排成一排,例如
n=7
-2 13 12 9 14 -10 2 (7个整数)
其最大的部分和为 48 (即 13+12+9+14)
n=7
-2 13 12 9 14 -10 2 (7个整数)
其最大的部分和为 48 (即 13+12+9+14)
输入
第一行一个整数 n
第二行n个整数(-100≤xi≤100)
数之间有一个空格;其中xi有正数
第二行n个整数(-100≤xi≤100)
数之间有一个空格;其中xi有正数
输出
一个整数(即最大的连续的部分和)
样例输入 复制
7
-2 13 12 9 14 -10 2
样例输出 复制
48
提示
【来源】
2014江苏省青少年信息学奥林匹克竞赛复赛
#include<bits/stdc++.h>
using namespace std;
/*思路一:穷举实现循环次数:
n+n-1+n-2+...+1
n*(n+1)/2
*/
int a[110], n, i, j;
int ma, s; //ma存放连续最大和,s存放从每个数开始连续数和
int main() {
cin >> n;
for (i = 1; i <= n; i++) {
cin >> a[i];
}
//求从每个数开始连续数的和
for (i = 1; i <= n; i++) {
s = 0;
for (j = i; j <= n; j++) {
s = s + a[j];
ma = max(ma, s);
}
}
cout << ma;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int a[110],dp[110],n,i,j;
int ma;
int main(){
cin >> n;
for (i = 1;i <= n;i++) {
cin >> a[i];
}
dp[1] = a[1];
ma = dp[1];
for (i = 2; i <= n;i++) {
dp[i] = max (dp[i-1]+a[i],a[i]);
ma = max (dp[i],ma);
}
cout << ma;
return 0;
}