思路:
DP啊
f[i][j]表示第i场能否到达j音量
if(j>=xx)f[i][j]=max(f[i-1][j-xx],f[i][j]);
if(j+xx<=ml)f[i][j]=max(f[i-1][j+xx],f[i][j]);
搞定
//By SiriusRen
#include <cstdio>
#include <algorithm>
using namespace std;
int n,bl,ml,xx;
int f[55][1005];
int main(){
scanf("%d%d%d",&n,&bl,&ml);
f[0][bl]=1;
for(int i=1;i<=n;i++){
scanf("%d",&xx);
for(int j=0;j<=ml;j++){
if(j>=xx)f[i][j]=max(f[i-1][j-xx],f[i][j]);
if(j+xx<=ml)f[i][j]=max(f[i-1][j+xx],f[i][j]);
}
}
for(int i=ml;i>=0;i--){
if(f[n][i]){printf("%d
",i);return 0;}
if(!i)puts("-1");
}
}