| 比赛 |
2026.9.12 |
评测结果 |
AAAAMMTTTT |
| 题目名称 |
分饼干 |
最终得分 |
40 |
| 用户昵称 |
Ruyi |
运行时间 |
5.117 s |
| 代码语言 |
C++ |
内存使用 |
310.31 MiB |
| 提交时间 |
2026-09-12 09:30:48 |
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define N 51
#define M 500000
using namespace std;
ll n,a[N],ans,dp[N/2+2][2*M+1],dp2[N/2+2][2*M+1];
ll read(){
ll x=0,f=1;
char c=' ';
while(c>'9'||c<'0'){
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+(c-'0');
c=getchar();
}
return x*f;
}
void write(ll x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9) write(x/10);
putchar(x%10+'0');
return ;
}
void dfs(ll l,ll r,ll now,ll s){
if(dp[l][now+M]>=s) return ;
dp[l][now+M]=s;
if(l>r) return ;
dfs(l+1,r,now+a[l],s+a[l]);
dfs(l+1,r,now-a[l],s+a[l]);
dfs(l+1,r,now,s);
return ;
}
void dfs2(ll l,ll r,ll now,ll s){
if(l>r){
ans=max(ans,dp[n/2+1][now+M]+s);
return ;
}
if(dp2[l-n/2][now+M]>=s) return ;
dp2[l-n/2][now+M]=s;
if(l>r) return ;
dfs2(l+1,r,now-a[l],s+a[l]);
dfs2(l+1,r,now+a[l],s+a[l]);
dfs2(l+1,r,now,s);
return ;
}
int main(){
freopen("cookie.in","r",stdin);
freopen("cookie.out","w",stdout);
n=read();
for(int i=1;i<=n;i++) a[i]=read();
for(int i=0;i<=n/2+1;i++)
for(int j=0;j<=2*M;j++) dp[i][j]=dp2[i][j]=-1e18;
dfs(1,n/2,0,0);
dfs2(n/2+1,n,0,0);
write(ans/2);
return 0;
}