new file: AT_arc073_b.cpp
Check cpp / md pair / Check md headers (push) Successful in 4s

This commit is contained in:
hanyixuanten committed 2026-10-28 05:18:49 +00:00
1 parent 16f5a6cb8a
commit b93c6ac8a4
1 file changed
+49
+49
View File
@@ -0,0 +1,49 @@
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
int n; // 100
int w; // 1e9
pair<int, int> 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;
}