AC

许诺  •  4天前


#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>

using namespace std;

int main() {

int n;
cin >> n;
vector<int> a(n), b(n);
for (int i = 0; i < n; ++i) {
    cin >> a[i];
}
for (int i = 0; i < n; ++i) {
    cin >> b[i];
}

int max_a = 0;
for (int num : a) {
    max_a += num;
}
vector<vector<int>> dp(n + 1, vector<int>(max_a + 1, INT_MAX / 2));
dp[0][0] = 0;

for (int i = 1; i <= n; ++i) {
    for (int j = 0; j <= max_a; ++j) {
        if (j >= a[i - 1]) {
            dp[i][j] = min(dp[i][j], dp[i - 1][j - a[i - 1]]);
        }
        dp[i][j] = min(dp[i][j], dp[i - 1][j] + b[i - 1]);
    }
}

int min_time = INT_MAX;
for (int j = 0; j <= max_a; ++j) {
    if (dp[n][j] < INT_MAX / 2) {
        int current_max = max(j, dp[n][j]);
        if (current_max < min_time) {
            min_time = current_max;
        }
    }
}

cout << min_time << endl;
return 0;

}


评论:

请先登录,才能进行评论