Cod sursa(job #960610)

Utilizator primulDarie Sergiu primul Data 10 iunie 2013 20:13:58
Problema Euro Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 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;
}