原文连接:https://ac.nowcoder.com/acm/problem/19990
AC代码:
#include<iostream>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
int dp[102][1002];
int n,m,beginlevel,maxlevel;
vector<int> vec;
int main(){
int i,j,flag=0;
cin>>n>>beginlevel>>maxlevel;
for(i=0;i<n;i++){
cin>>j;
vec.push_back(j);
}
memset(dp,0,sizeof(dp));
dp[0][beginlevel]=1;
for(i=1;i<=n;i++){
int k=vec[i-1];
for(j=0;j<=maxlevel;j++){
if(dp[i-1][j]==1){
if(j-k>=0){
dp[i][j-k]=1;//cout<<j-k<<endl;
}
if(j+k<=maxlevel){
dp[i][j+k]=1;//cout<<j+k<<endl;
}
}
}
}
for(j=maxlevel;j>=0;j--){
if(dp[n][j]==1){
cout<<j<<endl;
break;
}
}
if(j<0){
cout<<"-1"<<endl;
}
return 0;
}