许诺 • 2天前
#include <iostream>
#include <vector>
using namespace std; int main() {
int n, beginLevel, maxLevel;
cin >> n >> beginLevel >> maxLevel;
vector<int> c(n);
for (int i = 0; i < n; ++i) {
cin >> c[i];
}
vector<vector<bool>> dp(n + 1, vector<bool>(maxLevel + 1, false));
dp[0][beginLevel] = true;
for (int i = 1; i <= n; ++i) {
int change = c[i - 1];
for (int j = 0; j <= maxLevel; ++j) {
if (dp[i - 1][j]) {
if (j + change <= maxLevel) {
dp[i][j + change] = true;
}
if (j - change >= 0) {
dp[i][j - change] = true;
}
}
}
}
int result = -1;
for (int j = maxLevel; j >= 0; --j) {
if (dp[n][j]) {
result = j;
break;
}
}
cout << result << endl;
return 0;
}
评论:
请先登录,才能进行评论