AC

许诺  •  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;

}


评论:

请先登录,才能进行评论