题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2748
水得不想写。别忘了-1。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=55,M=1005; int n,m,a,qd; bool dp[2][M]; int main() { scanf("%d%d%d",&n,&qd,&m);dp[0][qd]=1; for(int i=1;i<=n;i++) { scanf("%d",&a); memset(dp[i&1],0,sizeof dp[i&1]); for(int j=0;j<=m;j++) { if(j+a<=m)dp[i&1][j]|=dp[(i-1)&1][j+a]; if(j-a>=0)dp[i&1][j]|=dp[(i-1)&1][j-a]; } } for(int j=m;j>=0;j--)if(dp[n&1][j]){printf("%d",j);return 0;} printf("-1");return 0; }