Pagini recente » Cod sursa (job #991288) | Cod sursa (job #1192175) | Cod sursa (job #125534) | Cod sursa (job #969495) | Cod sursa (job #2849866)
#include <fstream>
#define INF 1000000000
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int n, x, v[6000001], i_sol, j_sol;
pair <int, int > dp[10001];
///dp[i].first secv de suma maxima care se termina in i
/// dp[i].second unde incepe exact subsecventa cu suma max
int main()
{
fin>>n;
for(int i=1; i<=n; i++)
{
fin>>v[i];
}
///optimizam la o(n) cu dinamica
///dp[i]=subsecventa de suma maxima care se termina la pozitia i
int maxim=-INF;
for(int i=1; i<=n; i++)
{
if(dp[i-1].first<0)
{
dp[i].first=v[i];
dp[i].second=i;
}
else
{
dp[i].first=dp[i-1].first+v[i];
dp[i].second=dp[i-1].second;
}
if(dp[i].first>maxim)
{
i_sol=i;
maxim=dp[i].first;
}
}
maxim=-INF;
for(int i=1; i<=n; i++)
{
if(dp[i].first>maxim)
{
maxim=dp[i].first;
i_sol=dp[i].second;
j_sol=i;
}
}
fout<<maxim<<" "<<i_sol<<" "<<j_sol;
return 0;
}