P1115 最大子段和 一维动态规划
#include<iostream> #include<cmath> using namespace std; long long n,a[200005],dp[200005],ans; int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } dp[1]=a[1]; ans=a[1]; for(int i=2;i<=n;i++) { dp[i]=max(a[i],dp[i-1]+a[i]); ans=max(ans,dp[i]); } cout<<ans; }
先上此题的AC代码
思想:当我们选取数组中的某个数时,我们考虑的是对其进行后续的加和操作,这时候我们想要基础数据尽可能大,所以要选取dp[i]+a[i]和a[i]中更大的值,并用ans进行实时更新