Cod sursa(job #957628)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 5 iunie 2013 16:53:04
Problema Euro Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 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;
}