昨天晚上刷水题写到一道最大全1正方形,于是兴致勃勃将系列相关都复习了一遍qwq
1.最大子段和
测试地址:https://www.luogu.org/problem/show?pid=1115
Problem:给出一段序列,选出其中连续且非空的一段使得这段和最大。
Key:f[i]表示以i为终点时的最大子段和,f[i]=max(f[i-1],0)+a[i];ans=max(ans,f[i]);
1 #include<cmath> 2 #include<algorithm> 3 #include<cstring> 4 #include<iostream> 5 using namespace std; 6 const int maxn=200009; 7 int a[maxn],f[maxn]; 8 int main() 9 { 10 int n; 11 scanf("%d",&n); 12 for(int i=1;i<=n;i++) 13 { 14 scanf("%d",&a[i]); 15 } 16 for(int i=1;i<=n;i++) 17 { 18 f[i]=max(f[i-1],0)+a[i]; 19 } 20 int ans=-0x3f3f3f3f; 21 for(int i=1;i<=n;i++) 22 { 23 ans=max(ans,f[i]); 24 } 25 cout<<ans<<endl; 26 return 0; 27 }