Cod sursa(job #1722187)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 27 iunie 2016 15:45:36
Problema Euro Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<cstdio>
#include<vector>
#define MAXN 35000
using namespace std;
long long dp[MAXN];
vector<pair<int,int> > v;
long long maximum(long long a,long long b){
    if(a<b)
        return b;
    return a;
}
int main(){
    freopen("euro.in","r",stdin);
    freopen("euro.out","w",stdout);
    long long n,t,i,j,sum=0,day,x;
    scanf("%lld%lld",&n,&t);
    for(i=1;i<=n;i++){
        scanf("%lld",&x);
        sum+=x;
        if(sum<0){
            v.push_back(make_pair(sum,i));
            sum=0;
        }
    }
    if(v.size()==0||v[v.size()-1].second!=n)
        v.push_back(make_pair(sum,n));
    for(i=0;i<v.size();i++){
        sum=v[i].first;
        day=v[i].second;
        dp[i+1]=dp[i]+sum*day-t;
        for(j=i-1;j>=0&&(i-j)*(i-j)<=t+200;j--){
            sum+=v[j].first;
            dp[i+1]=maximum(dp[i+1],dp[j]+sum*day-t);
        }
    }
    printf("%lld",dp[v.size()]);
    return 0;
}