Cod sursa(job #979021)

Utilizator mitrutstrutMitrea Andrei Ionut mitrutstrut Data 31 iulie 2013 10:20:39
Problema Euro Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.9 kb
#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;
}