A1007 Maximum Subsequence Sum 動態規劃

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
long long int dp[10010];
int v[10010];
int s[10010];
int main(){
	int n;
	//freopen("in.txt","r",stdin);
	scanf("%d",&n);
	dp[0] = 0;
	int end =1;
	long long int sum = -10010;
	for(int i = 1;i<=n;i++){
		cin>>v[i];
		if(dp[i-1]+v[i]>v[i]){
			dp[i] = dp[i-1] + v[i];
			s[i] = s[i-1];
			if(dp[i]>sum){
				end = i;
				sum = dp[i];	
			}
		}
		else{
			dp[i] = v[i];
			s[i] = i;
			if(dp[i]>sum){
				end = i;	
				sum = dp[i];
			}
		}
	}
	if(sum<0){
		cout<<0<<" "<<v[1]<<" "<<v[n]<<'\n';
	}
	else{
		cout<<sum<<" "<<v[s[end]]<<" "<<v[end]<<'\n';	
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章