Pagini recente » Cod sursa (job #3137949) | Cod sursa (job #1201030) | Cod sursa (job #2011560) | Cod sursa (job #2899640) | Cod sursa (job #322435)
Cod sursa(job #322435)
//Perticas Catalin
//Working time:
//sursa x puncte
#include<stdio.h>
#include<string.h>
FILE*fin=fopen("euro.in","r");
FILE*fout=fopen("euro.out","w");
#define nm 40000
#define ll long long
#define inf 400000000000LL
#define max(a,b)((a)>(b)?(a):(b))
int b[nm],p[nm],n,t,np;
ll c[nm],sum[nm];
inline ll sij(int i,int j)
{
return sum[j]-sum[i-1];
}
int main()
{
int i,j,ib;
ll suma=0,best,ansc;
fscanf(fin,"%d%d",&n,&t);
np=1;
p[1]=0;
ib=t/2+1;
for(i=1;i<=n;i++)
{
fscanf(fin,"%d",&b[i]);
suma+=b[i];
sum[i]=sum[i-1]+b[i];
if(suma<0)
{
p[++np]=i;
suma=0;
}
}
if(p[np]!=n)
p[++np]=n;
for(i=2;i<=np;i++)
{
best=-inf;
for(j=max(1,i-ib);j<i;j++)
{
ansc=c[j]+sij(p[j]+1,p[i])*(ll)p[i]-t;
best=max(best,ansc);
}
c[i]=best;
}
fprintf(fout,"%lld",c[np]);
fclose(fin);
fclose(fout);
return 0;
}