From b93c6ac8a4bff026ef7799c7cd9f90d92739c322 Mon Sep 17 00:00:00 2001 From: hanyixuanten Date: Wed, 28 Oct 2026 05:18:49 +0000 Subject: [PATCH] new file: AT_arc073_b.cpp --- AT_arc073_b.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 AT_arc073_b.cpp diff --git a/AT_arc073_b.cpp b/AT_arc073_b.cpp new file mode 100644 index 0000000..844e734 --- /dev/null +++ b/AT_arc073_b.cpp @@ -0,0 +1,49 @@ +#include +using namespace std; +typedef pair pii; +int n; // 100 +int w; // 1e9 +pair obj[105]; +int dp[105][105][305]; +int w1; +int main() +{ + // freopen("satchel.in", "r", stdin); + // freopen("satchel.out", "w", stdout); + scanf("%d%d", &n, &w); + for (int i = 1; i <= n; ++i) + { + scanf("%d%d", &obj[i].first, &obj[i].second); + if (i == 1) + w1 = obj[1].first; + obj[i].first -= w1; + } + int maxS = 3 * n; + memset(dp, -1, sizeof(dp)); + dp[0][0][0] = 0; + for (int i = 1; i <= n; ++i) + { + int d = obj[i].first; + int v = obj[i].second; + for (int k = 0; k <= i; ++k) + { + for (int s = 0; s <= maxS; ++s) + { + dp[i][k][s] = dp[i - 1][k][s]; + if (k >= 1 && s >= d && dp[i - 1][k - 1][s - d] != -1) + dp[i][k][s] = max(dp[i][k][s], dp[i - 1][k - 1][s - d] + v); + } + } + } + int ans = 0; + for (int k = 0; k <= n; ++k) + for (int s = 0; s <= maxS; ++s) + { + if (dp[n][k][s] == -1) + continue; + if (1LL * k * w1 + s <= w) + ans = max(ans, dp[n][k][s]); + } + printf("%d\n", ans); + return 0; +} \ No newline at end of file