Cod sursa(job #2212689)
| Utilizator | Data | 14 iunie 2018 16:17:48 | |
|---|---|---|---|
| Problema | Euro | Scor | 95 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.64 kb |
#include<fstream>
#define INF 1000000000000000000LL
using namespace std;
ifstream fi("euro.in");
ofstream fo("euro.out");
long long n,t,i,j,x,ng,Sum[34568],Gr[34568],Lst[34568],Dp[34568];
int main()
{
fi>>n>>t;
Gr[0]=-1;
for(i=1; i<=n; i++)
{
fi>>x;
Sum[i]=Sum[i-1]+x;
if(Gr[ng]<0)
ng++;
Gr[ng]+=x;
Lst[ng]=i;
}
for(i=1; i<=ng; i++)
{
Dp[i]=-INF;
for(j=i-1; j>=0 && (i-j-1)*(i-j-1)<=t; j--)
Dp[i]=max(Dp[i],Dp[j]+(Sum[Lst[i]]-Sum[Lst[j]])*Lst[i]-t);
}
fo<<Dp[ng];
fi.close();
fo.close();
return 0;
}
