题目:BZOJ2748
解析:
背包DP。
省选题?嗯?怕不是背包入门题吧。。。
代码:
#include <bits/stdc++.h>
using namespace std;
int n,m,s,ans=-1;
int f[55][1005],w[55];
int main()
{
scanf("%d%d%d",&n,&s,&m);
for(int i=1;i<=n;i++) scanf("%d",&w[i]);
f[0][s]=1;
for(int i=1;i<=n;i++)
{
for(int j=w[i];j<=m;j++) if(f[i-1][j-w[i]]) f[i][j]=1;
for(int j=0;j<=m-w[i];j++) if(f[i-1][j+w[i]]) f[i][j]=1;
}
for(int i=m;i;i--) if(f[n][i]) {ans=i;break;}
cout<<ans;
return 0;
}