Submission #224532

#TimeUsernameProblemLanguageResultExecution timeMemory
224532kshitij_sodaniFeast (NOI19_feast)C++17
71 / 100
230 ms120168 KiB
#include <iostream> #include <bits/stdc++.h> using namespace std; #define a first #define b second #define pb push_back typedef long long int llo; llo mod=1000000007; llo dp[2001][2001]; llo cost[2001][2001]; llo ma=0; llo dnc(llo ind,llo l,llo r,llo ll,llo rr){ llo mid=(l+r)/2; pair<llo,llo> best={-1,-1}; for(llo i=ll;i<=rr;i++){ if(i>mid){ continue; } if(i==ll){ if(i==0){ best={-cost[0][mid],i}; } else{ best={-dp[i-1][ind-1]-cost[i][mid],i}; } } else{ best=min(best,{-dp[i-1][ind-1]-cost[i][mid],i}); } } dp[mid][ind]=-best.a; ma=max(ma,dp[mid][ind]); if(mid>l){ dnc(ind,l,mid-1,ll,best.b); } if(mid<r){ dnc(ind,mid+1,r,best.b,rr); } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); llo n,k; cin>>n>>k; llo it[n]; for(llo i=0;i<n;i++){ cin>>it[i]; } if(k==1){ llo su=0; for(int i=0;i<n;i++){ su+=it[i]; su=max(su,(llo)0); ma=max(ma,su); } cout<<ma<<endl; return 0; } llo ind=0; vector<llo> aa; while(ind<n){ if(it[ind]<=0){ llo su=0; while(ind<n){ if(it[ind]>0){ break; } su+=it[ind]; ind+=1; } aa.pb(su); } if(it[ind]>0){ llo su=0; while(ind<n){ if(it[ind]<0){ break; } su+=it[ind]; ind+=1; } aa.pb(su); } } llo j=0; for(llo i=0;i<aa.size();i++){ if(aa[i]>0){ llo ma=0; llo su=0; llo ind=i; llo ind2=j; while(ind>=0){ su+=aa[ind]; ma=max(ma,su); if(aa[ind]>0){ cost[ind2][j]=ma; ind2-=1; } ind-=1; } j+=1; } } for(llo i=0;i<j;i++){ dp[i][0]=cost[0][i]; ma=max(ma,cost[0][i]); } for(llo jj=1;jj<min(j,k);jj++){ dnc(jj,0,j-1,0,j-1); } cout<<ma<<endl; return 0; }

Compilation message (stderr)

feast.cpp: In function 'llo dnc(llo, llo, llo, llo, llo)':
feast.cpp:42:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
feast.cpp: In function 'int main()':
feast.cpp:90:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(llo i=0;i<aa.size();i++){
              ~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...