#include<bits/stdc++.h>
#define llong long long
#define ldouble long double
#define uint unsigned int
#define ulong unsigned long long
using namespace std;
struct dane {
int w;
llong d;
};
void solve() {
int n, c; cin >> n >> c;
vector<int> a(n), w(n);
for (int i = 0; i < n; i++) cin >> a[i] >> w[i];
int max_w = *max_element(w.begin(), w.end());
vector<llong> dp(max_w + 1, 0);
llong best = 0;
for (int i = 0; i < n; i++) {
int j = i;
vector<dane> group;
int nbest = 0;
while (j < n && a[j] == a[i]) {
llong c1 = dp[w[j]] + a[j];
llong c2 = best + a[j] - c;
llong wyn = max(c1, c2);
group.push_back({w[j], wyn});
j++;
}
for (auto [w, d] : group) {
dp[w] = max(dp[w], d);
best = max(best, d);
}
i = j - 1;
}
cout << best << "\n";
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
solve();
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include<bits/stdc++.h> #define llong long long #define ldouble long double #define uint unsigned int #define ulong unsigned long long using namespace std; struct dane { int w; llong d; }; void solve() { int n, c; cin >> n >> c; vector<int> a(n), w(n); for (int i = 0; i < n; i++) cin >> a[i] >> w[i]; int max_w = *max_element(w.begin(), w.end()); vector<llong> dp(max_w + 1, 0); llong best = 0; for (int i = 0; i < n; i++) { int j = i; vector<dane> group; int nbest = 0; while (j < n && a[j] == a[i]) { llong c1 = dp[w[j]] + a[j]; llong c2 = best + a[j] - c; llong wyn = max(c1, c2); group.push_back({w[j], wyn}); j++; } for (auto [w, d] : group) { dp[w] = max(dp[w], d); best = max(best, d); } i = j - 1; } cout << best << "\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); solve(); return 0; } |
English