很朴素的DP。。竟然是省选题。。。。。。
直接上代码:
#include<cstdio>
using namespace std;
bool dp[100][10000];
int c[1000];
int main()
{
int n,s,maxlevel;
scanf("%d%d%d",&n,&s,&maxlevel);
for(int i=1;i<=n;i++)
scanf("%d",&c[i]);
dp[0][s]=true;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=maxlevel;j++)
{
if(j-c[i]>=0 && dp[i-1][j-c[i]]) dp[i][j]=true;
if(j+c[i]<=maxlevel && dp[i-1][j+c[i]]) dp[i][j]=true;
}
}
int ans=-1;
for(int i=0;i<=maxlevel;i++)
if(dp[n][i]) ans=i;
printf("%d",ans);
return 0;
}