Pagini recente » Cod sursa (job #1108468) | Cod sursa (job #1490233) | Cod sursa (job #1367714) | Cod sursa (job #2445957) | Cod sursa (job #646074)
Cod sursa(job #646074)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
struct sumInfo{
int start;
int length;
int value;
sumInfo(){
start = -1;
length = 0;
}
};
struct sumInfo getSumInfo( int start, int length, int value ){
struct sumInfo elem;
elem.start = start;
elem.length = length;
elem.value = value;
return elem;
}
void ssm( vector<int> a ){
vector< struct sumInfo > dp;
int n = a.size();
int max;
int i;
dp.push_back( getSumInfo( 0, 1, a[0] ) );
for( i=1; i<n; ++i ){
if( dp[i-1].value+a[i] >= a[i] ){
dp.push_back( getSumInfo( dp[i-1].start, dp[i-1].length+1, dp[i-1].value+a[i] ) );
} else {
dp.push_back( getSumInfo( i, 1, a[i] ) );
}
}
max = 0;
for( i=1; i<n; ++i ){
if( dp[i].value > dp[max].value ){
max = i;
}
}
printf( "%d %d %d", dp[max].value, dp[max].start+1, max+1 );
}
int main(){
//freopen( "ssm.in", "r", stdin );
//freopen( "ssm.out", "w", stdout );
ifstream in( "ssm.in" );
ofstream out( "ssm.out" );
int n;
in >> n;
int tmp;
vector<int> a;
for( int i=0; i<n; ++i ){
in >> tmp;
a.push_back( tmp );
}
ssm( a );
return 0;
}