#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |