Submission #1245564

#TimeUsernameProblemLanguageResultExecution timeMemory
1245564minhpkKas (COCI17_kas)C++20
100 / 100
322 ms196576 KiB
#include <bits/stdc++.h> using namespace std; int a; int z[1000005]; int f[501][50001][2]; int sum,n; int dp(int i,int j,int k){ if (j>n){ return -1e5; } if (i>a){ if (j==0){ return 0; }else{ return -1e5; } } if (f[i][j][k]!=-1){ return f[i][j][k]; } f[i][j][k]=-1e5; int res=-1e5; res=max(res,dp(i+1,j,k)); if (j+z[i]<=n){ int preval=z[i]*(k==0)+dp(i+1,j+z[i],k); res=max(res,preval); } if (j-z[i]<0){ if (abs(j-z[i])<=n){ int preval=z[i]*(k==1)+dp(i+1,abs(j-z[i]),1-k); res=max(res,preval); } }else{ int preval=z[i]*(k==1)+dp(i+1,j-z[i],k); res=max(res,preval); } return f[i][j][k]=res; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> a; for (int i=1;i<=a;i++){ cin >> z[i]; sum+=z[i]; } n=sum/2; memset(f,-1,sizeof f); cout << max({dp(1,0,0)+sum-2*dp(1,0,0),dp(1,0,1)+sum-2*dp(1,0,1),0}) << "\n"; return 0; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...