// 前缀和(通过11/12组样例)
#include <bits/stdc++.h>
using namespace std;
const int N = 1000010;
int a[N];
int s[N];
int main(){
int n;
while (scanf("%d", &n) != EOF){
for (int i=0; i<=n; i++){
s[i] = 0;
}
for (int i=1; i<=n; i++){
scanf("%d", &a[i]);
}
for (int i=1; i<=n; i++){
s[i] = s[i-1] + a[i];
}
int maxx = -1e9;
for (int i=1; i<=n; i++){
for (int j=i; j<=n; j++){
if (s[j] - s[i-1] > maxx){
maxx = s[j] - s[i-1];
}
}
}
printf("%d\n", maxx);
}
return 0;
}
贪心
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
while (cin >> n){
int maxx = -1e9, s = 0;
for (int i=0; i<n; i++){
int x;
scanf("%d", &x);
sum += x;
if (s > maxx) maxx = s;
if (s < 0) s = 0;
}
printf("%d\n", maxx);
}
return 0;
}
```



京公网安备 11010502036488号