Cod sursa(job #65207)

Utilizator devilkindSavin Tiberiu devilkind Data 7 iunie 2007 16:34:02
Problema Euro Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <stdio.h>
#define NMAX 40000

long long a[NMAX],v[NMAX],best[NMAX],pos[NMAX];
long long n,i,j,k,T,rt;


void citire()
{
freopen("euro.in","r",stdin);
freopen("euro.out","w",stdout);
scanf("%lld %lld",&n,&T);
for (i=1;i<=n;i++)
        scanf("%lld",&a[i]);
}

void solve()
{
long int s=0,cnt=0,ok=0;
for (i=1;i<=n;i++)
        {
        if (s+a[i]<0) {
                      if (ok) {v[++cnt]=s;pos[cnt]=i-1;}
                      v[++cnt]=a[i];pos[cnt]=i;s=0;ok=0;
                      }
                else {s+=a[i];ok=1;}
        }
if (ok) {v[++cnt]=s;pos[cnt]=n;}
for (rt=1;rt*rt<=T;rt++);
long int back,sol;
for (i=1;i<=cnt;i++)
        {
        back=i-2*rt;
        if (back<1) back=1;
        s=v[i];best[i]=s*pos[i]-T+best[i-1];
        for (j=i-1;j>=back;j--)
                {
                s+=v[j];
                sol=s*pos[i]-T+best[j-1];
                if (sol>best[i]) best[i]=sol;
                }
        }
printf("%lld",best[cnt]);
}

int main()
{
citire();
solve();
return 0;
}