題目:
Maximum Subsequence Sum
我的代碼:
#include<iostream>
using namespace std;
int main(){
int a[10001],dp[10001],N; //dp是第i個元素前面的累加和(包括i)
int flag = 0;
int max,start,end,s,e;
cin>>N;
for(int i = 0;i < N;i++){
cin>>a[i];
if(a[i] >= 0) flag = 1;
}
if(flag == 0){ //輸入的數組全爲負數
cout<<0<<' '<<a[0]<<' '<<a[N-1];
return 0;
}
//dp[i]=max(dp[i-1]+a[i],a[i]) --狀態方程
dp[0] = a[0];
max = a[0];
s = e =0;
for(int i = 1;i < N;i++){
if(a[i] <= dp[i-1] + a[i]){
dp[i] = dp[i-1] + a[i];
e = i;
}
else { //序列已達最大值,需要更換序列
dp[i] = a[i];
s = e = i;
}
if(max < dp[i]){ //只有序列比之前的序列和要大,才改變max和始點、終點的值
start = s;
end = e;
max = dp[i];
}
}
cout<<max<<' '<<a[start]<<' '<<a[end];
return 0;
}