Pagini recente » Cod sursa (job #567389) | Cod sursa (job #946209) | Cod sursa (job #2965408) | Cod sursa (job #249167) | Cod sursa (job #957626)
Cod sursa(job #957626)
#include <fstream>
#include <vector>
#define NM 35000
#define s first
#define p second
using namespace std;
ifstream f("euro.in");
ofstream g("euro.out");
typedef pair<long long, long long> PI;
int N, i, j;
long long sum, T;
long long A[NM], DP[NM];
PI curr;
vector<PI> Q;
int main ()
{
f >> N >> T;
for (i=1; i<=N; i++)
f >> A[i];
for (i=1; i<=N;)
{
sum=0;
for (; sum>=0 && i<=N; i++)
sum+=A[i];
Q.push_back(make_pair(sum, i-1));
}
N=Q.size();
for (i=0; i<N; i++)
{
curr=Q[i];
DP[i+1]=DP[i]+curr.s*curr.p-T;
for (j=i-1; j>=0 && (i-j)*(i-j)<=T+100; j--)
{
curr.s+=Q[j].s;
DP[i+1]=max(DP[i+1], DP[j]+curr.s*curr.p-T);
}
}
g << DP[N] << '\n';
f.close();
g.close();
return 0;
}