能达到音量赋值1,否则为0,每一种音量可以达到也可以不达到,调高表示取这件物品,调低表示不取 。
初始化dp[0][be]表示开始能达到音量。
最后找到最大音量输出。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int M = 1005;
int n,ma,be;
int dp[51][M];
int a[M];
int main(){
scanf("%d %d %d",&n,&be,&ma);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
dp[0][be]=1;
for(int i=1;i<=n;i++)
for(int j=ma;j>=0;j--){
if(j-a[i]>=0)
dp[i][j]=dp[i][j]||dp[i-1][j-a[i]];
if(j+a[i]<=ma)
dp[i][j]=dp[i][j]||dp[i-1][j+a[i]];
}
for(int i=ma;i>=1;i--){
if(dp[n][i]){
printf("%d",i);
return 0;
}
}
printf("-1");
return 0;
}