动规,有点像
一:
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
long long n;
cin>>n;
int j;
cin>>j;
long long now=j,sum=j;
while(--n){
long long a;
cin>>a;
if(now<0) now=0;
now+=a;
sum=max(now,sum);
}
cout<<sum;
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~
二:
#include<bits/stdc++.h>
using namespace std;
int n,a,b,i,ans=-2147483647;
int main(){
cin>>n;
for(i=1;i<=n;i++){
cin>>a;
if(i==1) b=a;
else b=max(a,a+b);
ans=max(ans,b);
}
cout<<ans;
return 0;
}
~~~~~~~~~~~~~
好像差不多捏,但是第一种比较好理解, if(now<0) now=0;
根据题意这个判断的位置会发生改变,如全为负数输出 0,以及直接输出最大值,就会在这里有差异。