超过100%的用户
2025-08-12 11:42:50
发布于:浙江
18阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const long long INF = 1e18;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, t;
cin >> n >> t;
vector<int> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
vector<long long> min_net(n + 2, INF);
long long total_gift = 0;
for (int i = 0; i < n; ++i) {
long long cost, v_val;
cin >> cost >> v_val;
total_gift += v_val;
long long net = cost - v_val;
if (net < min_net[a[i]]) {
min_net[a[i]] = net;
}
}
vector<long long> dp(n + 1, 0);
for (int i = 1; i <= n; ++i) {
dp[i] = dp[i - 1];
if (i >= t) {
int l0 = i - t + 1;
if (l0 >= 1 && min_net[l0] != INF) {
long long candidate = dp[l0 - 1] + min_net[l0];
if (candidate < dp[i]) {
dp[i] = candidate;
}
}
}
}
long long ans = total_gift + dp[n];
cout << ans << endl;
return 0;
}
这里空空如也
有帮助,赞一个