Pagini recente » Cod sursa (job #1906727) | Cod sursa (job #2268498) | Cod sursa (job #1880660) | Cod sursa (job #636592) | Cod sursa (job #1722188)
#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;
}