nyoj44 子串和 dp
阿新 • • 發佈:2018-12-09
用dp[]陣列表示當前位置的最大和。dp[0]=a[0]。
如果dp[i-1]大於0則dp[i]=dp[i-1]+a[i]。
如果dp[i-1]小於等於0則dp[i]=a[i]。
最後輸入最大的dp即為答案。
#include <iostream> #include <algorithm> #include <cstring> #define maxn 1000005 using namespace std; int a[maxn]; int dp[maxn]; int main(){ int test_num; cin>>test_num; while(test_num--){ memset(dp,0,sizeof(dp)); int num; cin>>num; for(int i=0;i<num;i++) cin>>a[i]; int sum=0; dp[0]=a[0]; for(int i=1;i<num;i++){ if(dp[i-1]<0) dp[i]=a[i]; else dp[i]=dp[i-1]+a[i]; } int maxx=-1; for(int i=1;i<num;i++){ if(maxx<dp[i]) maxx=dp[i]; } cout<<maxx<<endl; } }