许诺 • 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;
}
评论:
请先登录,才能进行评论