Pagini recente » Cod sursa (job #2495610) | Cod sursa (job #2593990) | Cod sursa (job #2290585) | Cod sursa (job #3160944) | Cod sursa (job #2852042)
#include <fstream>
#include <climits>
using namespace std;
ifstream fin ("ssm.in");
ofstream fout ("ssm.out");
int n, maxim=INT_MIN, i_sol, j_sol, x;
struct dinamica
{
int suma;
int inceput;
}dp[6000001];
int main()
{
///dp[i].suma=suma maxima a unei subsecvente care se termina pe poz i
///dp[i].inceput=inceputul subsecventei de suma maxima care se termina pe poz i
fin>>n>>x;
dp[1].suma=x;
dp[1].inceput=1;
for(int i=2; i<=n; i++)
{
fin>>x;
///dp[i]=max(dp[i-1]+x, x) care explicitat este urm lucru:
if(dp[i-1].suma<0)
dp[i].suma=x, dp[i].inceput=i;
else
dp[i].suma=dp[i-1].suma+x, dp[i].inceput=dp[i-1].inceput;
}
for(int i=1; i<=n; i++)
{
if(dp[i].suma>maxim)
{
maxim=dp[i].suma;
i_sol=dp[i].inceput;
j_sol=i;
}
}
fout<<maxim<<" "<<i_sol<<" "<<j_sol;
return 0;
}